今改めて読み直したい Go基礎情報 その1 / read again awesome go article

今改めて読み直したい Go基礎情報 その1 / read again awesome go article

golang.tokyo #25の登壇資料です。
https://golangtokyo.connpass.com/event/133581/

文中のリンクは以下のブログ記事で紹介しています。
https://budougumi0617.github.io/2019/06/20/golangtokyo25-read-again-awesome-go-article/

Eb6be531bcfaa99714d8d3b48665a5a9?s=128

Yoichiro Shimizu

June 18, 2019
Tweet

Transcript

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

  2. • 清水 陽一郎 @budougumi0617 ◦ Backend Engineer ◦ Go /

    Ruby • Blog ◦ 毎週書いてる • コウペンちゃんが好き 自己紹介 2
  3. 今日のテーマ
 Goの郷に入る
 3 /

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

  5. Goらしい
 とは?
 5 /

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

  7. Simplicity - 徹底的な簡潔性 • GoのMission ◦ Creating software at scale

    ◦ Running software at scale • システムは成長する際に、デザインの簡潔性を通してのみ、 安定し、安全であり、首尾一貫したままでいられる 7 Go's New Brand の Mission, プログラミング言語 Go まえがき より
  8. 言語哲学は変わらない。言語仕様も変わらない • Simplicityを体現するために • Goは1.0の頃から言語仕様がほとんど変わらない ◦ 予約語も25個から増えない • 今後もGo1.Xのうちは言語仕様は変わらない ◦

    変わるのはGo2から ◦ Go 2は4年後(Go 1.20)くらい? 8 Go2については Toward Go 2 より 微妙な言語仕様の変更はたまに入る(例 :Go.1.10)
  9. 変わらないから色あせない • 昔のベストプラクティスが今でもほとんど有効 ◦ 並行処理(Context, errgroup.Groupの追加)くらい? • 枯れた情報でGoらしさを知ることでGoの郷に入る 9

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

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

    11
  12. 言語思想
 12 /

  13. • https://amazon.jp/dp/4621300253 • 日本語で書かれたGoの書籍の中で一番体系的な書籍 • なぜインターフェースは小さく作るべきか • Goのカプセル化へのアプローチ • なぜtesting

    pkgにはsetup/teardownやassertがないのか • なぜ例外を持たないのか プログラミング言語Go(書籍) 13
  14. • 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
  15. • https://talks.golang.org/2015/simplicity-is-complicated.slide • Goの表現は単純だ、と言われる • Goの単純さ、シンプルな言語イメージは どのように醸成されているのか? Simplicity is Complicated

    15
  16. • 複雑性は明瞭性を失う例 ◦ No free, Only GC ◦ 単純な並行処理 ▪

    “go”と書くだけ ▪ no ID ▪ ステータス Simplicity is Complicated 16 Simplicity is Complicated より
  17. • https://blog.golang.org/toward-go2 • Go2に至る仕様策定プロセス • Proposalは誰でも見れる ◦ Go 2 Draft

    Designs • Go Teamは意見を求めている Toward Go 2 17 英語が難しかったら Gopher Slackの #japan などでも議論してます
  18. • 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
  19. • https://blog.golang.org/gopher • Gopherの生い立ち • Go's New Brandの中でも 厳格な(?)仕様が The

    Go Gopher 19 Go Brand Book より
  20. • https://go-proverbs.github.io/ • Rob Pike氏の格言集 • Gopher Slackのロード時にも見れたりする。 • その格言が出た発表はYouTubeで確認することができる

    • 言語設計者が何を解決したくてこの仕様にしたのか • 何を意図してこの仕様にしたのか Go Proverbs 20
  21. • https://dave.cheney.net/practical-go • Dave Cheney氏のブログ記事のオススメリンク集 • Functional optionsパターンや`T`型メソッドと`*T`型メソッドの使 いわけなど •

    ロギングやエラーハンドリングも含めて開発で一度は悩むポイン トを解説してくれている Practical Go 21
  22. Go Wayな
 設計・実装
 22 /

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

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

    日本語版もあります
  25. • https://ukai-go-talks.appspot.com/2014/gocon.slide • Googler鵜飼さんによるReadabilityがあるGoの書き方 ◦ 明瞭・簡潔 ◦ 使いやすいAPI ◦ 適切なコメント

    ◦ 素直なコードフロー Goに入ってはGoに従え 25
  26. • 書き方を知らないと 困るような状況 Goに入ってはGoに従え 26

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

  28. • https://amazon.jp/dp/4873117526 • APIやMongoDBを使ったアプリ開発の本 • 監訳者の鵜飼さんの「Goらしいコードの書き方」が付録 • 実践的な処理のリファクタリング例・思考が読める ◦ Twitter

    StreamやDB操作など • Contextを使ったリファクタリング例もある Go言語によるWebアプリケーション開発(書籍) 28 Go 1.7以前の書籍なので x/net/context pkgのContextを使っている
  29. • https://amazon.jp/dp/4297107279 • 環境構築 • CLIツールの作り方 • テストの書き方 • まずなにか作ってみたい!という時に最適な一冊

    • リンク先をクリックすると… みんなのGo言語(書籍) 29
  30. izumin5210さんの
 その2に続く!
 30 /