Upgrade to Pro — share decks privately, control downloads, hide ads and more …

今改めて読み直したい 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/

Yoichiro Shimizu

June 18, 2019
Tweet

More Decks by Yoichiro Shimizu

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

  3. 今日のテーマ

    Goの郷に入る

    3
    /

    View full-size slide

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

    View full-size slide

  5. Goらしい

    とは?

    5
    /

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. 今日のテーマ

    Goの郷に入る

    10
    /

    View full-size slide

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

    View full-size slide

  12. 言語思想

    12
    /

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. Go Wayな

    設計・実装

    22
    /

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. izumin5210さんの

    その2に続く!

    30
    /

    View full-size slide