🐹
キャッチアップ Go
- 本家サイト
- https://go.dev/
- サンプルコードの掲載や書籍の紹介など開発者にとって有用な情報がまとまっている
- Go の github wiki
チュートリアル
-
https://go.dev/doc/
- の Getting Started の欄を上から順にやっていくのが良さそう
- 書籍なら『初めてのGo言語』がおすすめ
実践
イディオム
- Google のスタイルガイド
- https://google.github.io/styleguide/go/index
- 2022年末に公開されたもので大変有用
- Effective Go
- https://golang.org/doc/effective_go
- より良い Go コードを書くために
- Go Code Review Comments
- https://github.com/golang/go/wiki/CodeReviewComments
- よくある指摘をまとめたもの
- Google のスタイルガイドに吸収されて重複している箇所多数
- OWASP Go Secure Coding Practices Guide
Web アプリケーション
- 書籍なら『実用 Go言語』がおすすめ
思想
- Go に関するよくある質問
- https://golang.org/doc/faq
- 言語特性をより理解するために
コードリーディング
- Go のコードでお手本を探すなら標準ライブラリが一番いい
- https://pkg.go.dev/std
- 最も Go like な書き方が学べる
Go 製の OSS
OSS を読んでみる
- kubernetes
- uber
- prometheus
- Gin
- Echo
tool
-
パッケージ検索
- https://pkg.go.dev/
- ライブラリの使い方を調べるときに使う
-
Go Playground
- https://play.golang.org/
- REPL のような実行環境
- ただし Go バージョンは最近のものしか選択できない
- go の開発用ビルドが使用できるので、ダウンロードするほどでもないけどちょっと挙動を確かめてみたい、みたいな時にも便利
-
Awesome Go
- https://go.libhunt.com/
- https://github.com/avelino/awesome-go
- Go のフレームワークやライブラリを探すのに
-
goenv
- https://github.com/syndbg/goenv
- rbenv の Go 版みたいなやつ
- ただし、go は同じメジャーバージョン内であれば後方互換性が完全に保たれ、また go.mod のバージョンでビルドされるのでローカルのバージョンをプロジェクトのバージョンと合わせておく必要があまりない
- 例えばローカルが 1.20 で go.mod が1.18 の場合でも問題なくビルドできる
- そのプロジェクトでは 1.19以降で入った機能はコンパイルエラーになるという感じで、うまいことやってくれる
- https://go.dev/ref/mod#go-mod-file-go
- 例えばローカルが 1.20 で go.mod が1.18 の場合でも問題なくビルドできる
- 何か特別な理由で複数バージョンを使い分けたいときだけ使う
-
linter
- 公式の Golint が非推奨になったのでサードパーティ製のものを使う現状
- https://zenn.dev/sanpo_shiho/articles/09d1da9af91998
Conference
- 世界中の go のカンファレンスを記載した wiki
- GoConference
- https://gocon.jp/
- 日本で一番大規模な Go に関わるカンファレンス、半年に一回開催、予約は connpass から
- 世界で最古の go のカンファレンスでもあり、歴史がある
Community
- Slack-Gophers
- https://blog.gopheracademy.com/gophers-slack-community/
- Gopher のための slack チャンネル
-
japan
やtokyo
など日本向けのチャンネルもあって、たまに質問してる人とかもいる
- golang-nuts
- https://groups.google.com/g/golang-nuts
- Go の中の人たちとコミュニケーション取れる
- 日本コミュニティのブログ
- https://blog.golang.jp/
- イベントの開催動向などを発信してくれてる
- gopher 道場
- tenntenn さんが主催している初心者向け勉強会
- https://gopherdojo.org/
- https://mercan.mercari.com/articles/2018-06-14-113329/
- 最近は開催されていないっぽい?
企業ブログ
- メルカリ:https://engineering.mercari.com/blog/category/go/
- M3:https://www.m3tech.blog/search?q=go
- eureka:https://medium.com/eureka-engineering/tagged/go
- Future:https://future-architect.github.io/tags/Go/
- ZOZOテクノロジーズ:https://techblog.zozo.com/archive/category/Go言語
- wantedly:https://www.wantedly.com/stories/s/wantedly_engineers
Go 使ってる企業一覧
暇なときに
- Go 言語(Golang) はまりどころと解決策
- Go言語で幸せになれる10のテクニック
- GoでWebアプリ開発時にあるあるだったレビューコメント
- Goを学ぶときにつまずきやすいポイントFAQ
- Go 生みの親、Rob Pike の格言
- https://go-proverbs.github.io/
- 英語講演なんだけど日本語訳してるのがあった
より具体的なナレッジ
- 継承について
-
https://golang.org/doc/faq#inheritance
- extend 宣言がないという話
- 継承はなくて Composition(Embedded) があるが、それは delegate だよという話
-
https://golang.org/doc/faq#inheritance
- インターフェース実装について
- https://golang.org/doc/faq#implements_interface
- implement 宣言はないよという話
- 例外について
- https://golang.org/doc/faq#exceptions
- exception がない(推奨されない)ので、メソッドはエラーを返して、呼び出し側は都度チェックをしようという話
- slice のプラクティス
- https://qiita.com/imoty/items/bb18fb50d526474d2d10
- メモリやコピーの効率に気をつけよう
- nil にも型があることについて
- メソッドと関数の違い
- https://qiita.com/sukezane/items/5bd061b4a766c43c9995
- Ruby では一律でメソッドと呼ぶことが多いが、Go ではレシーバをとる関数がメソッドと呼ばれる
- test
-
https://golang.org/pkg/testing/
- アサーションないよとか
- table driven test
-
https://golang.org/pkg/testing/
- ゼロバリュー
Discussion