web-technical-blog

web開発に関する技術メモ

eureka Meetup #06 -Go! Go! Go!- の勉強会

eure.connpass.com

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あたり
  • 有名なパッケージ
    • aws-sdk-goはAPI Clientのお手本実装の一つ
  • Go界隈の有名人をSNSでフォローする
  • 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のナレッジ

    • キャッチアップと共有は難しい
    • 更新が早い
    • 英語の情報が多い
      • wiki,gophercon,blog,git book
    • 本は古い
    • 日本語の情報インフルエンサー
  • ビジネスナレッジ

    • Qiita,Confluence,Git book
    • OWNERSファイル

Package Layout

  • 難しい
    • プロジェクトの規模・性質によってまちまち
  • 細分化しすぎない
  • 統一しすぎない
    • 分ける軸
    • 機能ベース
    • 依存ライブラリベース

pprof/trace

  • pprofは全員が使えるようになるべき

    • memory,cpu etc…
    • goroutineを追加した場合のリーク検知
    • uber/go-torch,rakyll/gom,mkevac/debugcharts
  • Trace機構は早い段階でいれたほうが良い