eureka Meetup #06 -Go! Go! Go!- の勉強会
Goのパッケージ構成について
Go Package Guidelines
- godocを見る機会が多い
Package構成について
- Goのインターフェースはi/oパッケージを参考にする
- GoではMVCパターンを過剰に意識しないほうが良い
- とにかく、野良でなく標準パッケージを参考にするとよい
- cryptoパッケージも参考になる
登壇資料
https://speakerdeck.com/kaneshin/go-package-guidelines
標準ライブラリのコードリーディングで学ぶGo
Go言語のいいところ
- コンパクトな言語仕様
- 本質に集中するための標準ツール群
- 充実した公式ドキュメント
- 可読性の高い標準ライブラリ
- 他にもいっぱい…
可読性の高い標準ライブラリ
- 標準ライブラリも可読性とパフォーマンスのバランスに優れ、コードリーディングしやすい
- Goには三項演算子すらない
コードリーティングするためのツール
- 普段使用しているエディタの機能で。
- (IntelliJ IDEA + Go plugin) or Gogland(どちらも機能は同じ)
- interfaceの実装満たす構造体へのジャンプも可能
compressパッケージのリーディングから学べたこと
- Goの考え方やイディオム
- ビット演算
- スライス演算
- Goにおけるバイト列の操作方法の一部
- gzip圧縮の概要とそのアプリケーションコードレベルの記述
Go学習リソース
- 公式ドキュメント、Wiki
- Go Blog,Go Wiki,Effective Goあたり
- 有名なパッケージ
- Go界隈の有名人をSNSでフォローする
- Go関連のカンファレンス・イベントのスライドをチェックする
- GopherCon https://github.com/gophercon/2017-talks
- 書籍
- プログラミング言語Go(日英両方あり)
- はじめてのGo言語
- スターティングGo言語
登壇資料
https://speakerdeck.com/yu81/biao-zhun-raiburarifalsekodorideingudexue-bugo
Goぽいんとれっすん
Comments
- ちゃんと書く
- 特に公開している型や関数、パッケージ
- 英語コメント
- 日本語話者の多い会社ではやめたほうが良い
- golint
- エディタ、CI、Git huuk
- しっかり対応するなら英・日
Test
- 書く
- 書く文化を作る
- テストコードがない場合はPRで指摘する
- CIの設定は最初にする。常に緑に保つ
- 実行方法を統一しておく
- make,guip,bazei
- CIの変更も簡単になる
- TIPS
- テーブルドリブンテスト
- TestMain
- サブテスト
- ゴールデンファイル
Continuous Integration
CircleCI? Travis? Jenkins?
- 何でもいいからいれましょう
- gofmt,go vet golint
- golintはコメントを正しく書く必要がある
- go test -p 1
- -pはコア数 並列数のこと
GoのCIはSemaphoreはおすすめ
- ただし、CicleCIとかよりは、機能は少ない
Vendor
していない場合は早めに入れる
- 開発者、テスト、リリースごとに違うバージョン
XXXを使えばいいですか?
- 新しくやるならdepがおすすめ
- gb,glideでもいいみたい
Knowledge Sharing
Goのナレッジ
ビジネスナレッジ
- Qiita,Confluence,Git book
- OWNERSファイル
Package Layout
- 難しい
- プロジェクトの規模・性質によってまちまち
- 細分化しすぎない
- テストが遅くなる
- https://github.com/olivere/elastic
- 統一しすぎない
- 分ける軸
- 機能ベース
- 依存ライブラリベース
pprof/trace
pprofは全員が使えるようになるべき
- memory,cpu etc…
- goroutineを追加した場合のリーク検知
- uber/go-torch,rakyll/gom,mkevac/debugcharts
Trace機構は早い段階でいれたほうが良い
- New Relic,Stackdriver,X-Ray,LightStep,AppDash…
- https://github.com/evalphobia/apptracer