Slide 1

Slide 1 text

今改めて読み直したい Go基礎情報 その1 2019/06/18 golang.tokyo #25 Yoichiro Shimizu @budougumi0617

Slide 2

Slide 2 text

● 清水 陽一郎 @budougumi0617 ○ Backend Engineer ○ Go / Ruby ● Blog ○ 毎週書いてる ● コウペンちゃんが好き 自己紹介 2

Slide 3

Slide 3 text

今日のテーマ
 Goの郷に入る
 3 /

Slide 4

Slide 4 text

今あらためて読み直したいGo基礎情報 ● 対象 ○ 3年以上前に発行された書籍・公開された記事 ■ Go 1.6以前 4

Slide 5

Slide 5 text

Goらしい
 とは?
 5 /

Slide 6

Slide 6 text

Goに入ってはGoに従え、と言うが ● Goらしいとは何か? ○ goroutine を使っていればGoらしい? ○ 多値でerrorを返す関数を作ればGoらしい? 6

Slide 7

Slide 7 text

Simplicity - 徹底的な簡潔性 ● GoのMission ○ Creating software at scale ○ Running software at scale ● システムは成長する際に、デザインの簡潔性を通してのみ、 安定し、安全であり、首尾一貫したままでいられる 7 Go's New Brand の Mission, プログラミング言語 Go まえがき より

Slide 8

Slide 8 text

言語哲学は変わらない。言語仕様も変わらない ● Simplicityを体現するために ● Goは1.0の頃から言語仕様がほとんど変わらない ○ 予約語も25個から増えない ● 今後もGo1.Xのうちは言語仕様は変わらない ○ 変わるのはGo2から ○ Go 2は4年後(Go 1.20)くらい? 8 Go2については Toward Go 2 より 微妙な言語仕様の変更はたまに入る(例 :Go.1.10)

Slide 9

Slide 9 text

変わらないから色あせない ● 昔のベストプラクティスが今でもほとんど有効 ○ 並行処理(Context, errgroup.Groupの追加)くらい? ● 枯れた情報でGoらしさを知ることでGoの郷に入る 9

Slide 10

Slide 10 text

今日のテーマ
 Goの郷に入る
 10 /

Slide 11

Slide 11 text

今あらためて読み直したいGo基礎情報 その1 ● 言語思想 ○ Goがどのような考えで設計されているのか? ● GoWayな設計・実装 ○ どのような設計・実装をすればSimplicityなのか? 11

Slide 12

Slide 12 text

言語思想
 12 /

Slide 13

Slide 13 text

● https://amazon.jp/dp/4621300253 ● 日本語で書かれたGoの書籍の中で一番体系的な書籍 ● なぜインターフェースは小さく作るべきか ● Goのカプセル化へのアプローチ ● なぜtesting pkgにはsetup/teardownやassertがないのか ● なぜ例外を持たないのか プログラミング言語Go(書籍) 13

Slide 14

Slide 14 text

● https://talks.golang.org/2012/splash.slide ● https://talks.golang.org/2012/splash.article ● Goは何を期待されている言語なのか知る ○ Googleは何に問題を感じてGoを作ったのか? ○ Googleは何を解決するためにGoを作ったのか? Go at Google: Language Design in the Service of Software Engineering 14

Slide 15

Slide 15 text

● https://talks.golang.org/2015/simplicity-is-complicated.slide ● Goの表現は単純だ、と言われる ● Goの単純さ、シンプルな言語イメージは どのように醸成されているのか? Simplicity is Complicated 15

Slide 16

Slide 16 text

● 複雑性は明瞭性を失う例 ○ No free, Only GC ○ 単純な並行処理 ■ “go”と書くだけ ■ no ID ■ ステータス Simplicity is Complicated 16 Simplicity is Complicated より

Slide 17

Slide 17 text

● https://blog.golang.org/toward-go2 ● Go2に至る仕様策定プロセス ● Proposalは誰でも見れる ○ Go 2 Draft Designs ● Go Teamは意見を求めている Toward Go 2 17 英語が難しかったら Gopher Slackの #japan などでも議論してます

Slide 18

Slide 18 text

● Go2もGoのMissionやValuesは何も変わらない ● The goals we have for Go today are the same as in 2007. ● Our goal for Go 2 is to fix the most significant ways Go fails to scale. Toward Go 2 18

Slide 19

Slide 19 text

● https://blog.golang.org/gopher ● Gopherの生い立ち ● Go's New Brandの中でも 厳格な(?)仕様が The Go Gopher 19 Go Brand Book より

Slide 20

Slide 20 text

● https://go-proverbs.github.io/ ● Rob Pike氏の格言集 ● Gopher Slackのロード時にも見れたりする。 ● その格言が出た発表はYouTubeで確認することができる ● 言語設計者が何を解決したくてこの仕様にしたのか ● 何を意図してこの仕様にしたのか Go Proverbs 20

Slide 21

Slide 21 text

● https://dave.cheney.net/practical-go ● Dave Cheney氏のブログ記事のオススメリンク集 ● Functional optionsパターンや`T`型メソッドと`*T`型メソッドの使 いわけなど ● ロギングやエラーハンドリングも含めて開発で一度は悩むポイン トを解説してくれている Practical Go 21

Slide 22

Slide 22 text

Go Wayな
 設計・実装
 22 /

Slide 23

Slide 23 text

● https://golang.org/doc/effective_go.html ● Goの特徴的な言語仕様の効果的な使い方 ● 名前付きの返り値はいつ使うと効果的か etc... Effective Go 23

Slide 24

Slide 24 text

● https://github.com/golang/go/wiki/CodeReviewComments ● Effective Goに更に加えてベターコーディングが記載 ● Effective Goとともに最初に勧められることが多い CodeReviewComments 24 日本語版もあります

Slide 25

Slide 25 text

● https://ukai-go-talks.appspot.com/2014/gocon.slide ● Googler鵜飼さんによるReadabilityがあるGoの書き方 ○ 明瞭・簡潔 ○ 使いやすいAPI ○ 適切なコメント ○ 素直なコードフロー Goに入ってはGoに従え 25

Slide 26

Slide 26 text

● 書き方を知らないと 困るような状況 Goに入ってはGoに従え 26

Slide 27

Slide 27 text

● 書き方を知らないと 困るような状況 Goに入ってはGoに従え 27

Slide 28

Slide 28 text

● https://amazon.jp/dp/4873117526 ● APIやMongoDBを使ったアプリ開発の本 ● 監訳者の鵜飼さんの「Goらしいコードの書き方」が付録 ● 実践的な処理のリファクタリング例・思考が読める ○ Twitter StreamやDB操作など ● Contextを使ったリファクタリング例もある Go言語によるWebアプリケーション開発(書籍) 28 Go 1.7以前の書籍なので x/net/context pkgのContextを使っている

Slide 29

Slide 29 text

● https://amazon.jp/dp/4297107279 ● 環境構築 ● CLIツールの作り方 ● テストの書き方 ● まずなにか作ってみたい!という時に最適な一冊 ● リンク先をクリックすると… みんなのGo言語(書籍) 29

Slide 30

Slide 30 text

izumin5210さんの
 その2に続く!
 30 /