Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

オススメの標準・準標準パッケージ20選

7,064 views

Published on

Go言語LT大会で発表した資料です。
https://go-beginners.connpass.com/event/55768/

Published in: Technology
  • Be the first to comment

オススメの標準・準標準パッケージ20選

  1. 1. オススメの 標準・準標準 パッケージ20選 2017/06/05(月) Go言語LT大会 The Go gopher was designed by Renee French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.
  2. 2. 自己紹介 メルカリ/ソウゾウ 上田拓也 twitter: @tenntenn ■ コミュニティ活動 Google Cloud Platform User Group (GCPUG) Tokyo Goビギナーズ golang.tokyo Go Conference ■ 業務 GAE/Goでメルカリカウルを作ってます GoやGCPコミュニティを盛り上げる仕事 Gopherを描く仕事(LINEスタンプ) 2
  3. 3. Goの標準パッケージ ■ さまざまな機能が提供されている ● HTTPサーバ/クライアント ● 文字列処理 ● 暗号化 ● 画像処理 3 $ go version go version go1.8.3 darwin/amd64 $ go list std | grep -v vendor | wc -l 161 ■ かなりの数のパッケージがある
  4. 4. Goの準標準パッケージ ■ golang.org/xで提供されるパッケージ ● https://godoc.org/-/subrepo ● サーバ類 ● 文字列処理 ● 画像処理 4 ■ かなりの数のパッケージがある ● 450パッケージ以上はある
  5. 5. 1.fmt パッケージ ■ 書式付きプリント機能を提供する ● %T,%q,%vあたりが便利 ○ https://play.golang.org/p/MLNmJu40l9 ● %[1]dとかでN番目の値が出せる ○ https://play.golang.org/p/n2hwezLMS8 ● fmt.Stringerが便利 ○ https://play.golang.org/p/QLzowzeU15 5
  6. 6. 2.io パッケージ ■ IO関係の基本的な型が定義されている ● io.Readerとio.Writerが強力 ○ インタフェースの良い例 ● io.TeeReaderとかもあり便利 ○ https://play.golang.org/p/mHmstVuvfG 6
  7. 7. 3.io/ioutil パッケージ ■ IO関係の便利関数がある ● ioutilという名前が与えてくれる勇気 ○ utilって名前はよくない ○ 文脈が伴えばOK ● NopCloserが便利 ○ https://play.golang.org/p/EkAbmCZqcH ● ReadAllはあんまり使わない ○ ストリームのままやろう 7
  8. 8. 4.strings パッケージ ■ 文字列に関する処理を提供 ● 置換とか連結とか ○ https://play.golang.org/p/rMsm_u_TEH ● strings.Readerが便利 ○ 文字列をio.Readerに変換してくれる ● strings.Fieldsが便利 ○ ホワイトスペースでいい感じに区切ってくれる ○ https://play.golang.org/p/BtEqaBQWIR ○ strings.FieldsFuncもある 8
  9. 9. 5.bytes パッケージ ■ stringsパッケージの[]byte版 ● stringsにあるものはだいたいある ● bytes.Readerが便利 ○ []byteをio.Readerに変換できる ● bytes.Bufferが便利 ○ io.Readerとio.Writerを実装している ○ ゼロ値で使える ○ https://play.golang.org/p/w2BtSCUg1w 9
  10. 10. 6.bufio パッケージ ■ バッファリングされたIO機能を提供 ● bufio.Scannerが便利 ○ https://play.golang.org/p/34k4uJBIm3 ○ 1行ずつ読み込むのに重宝する ● bufio.SplitFuncでカスタマイズ ○ https://play.golang.org/p/OXtPVl4kae 10
  11. 11. 7.encoding/binary パッケージ ■ バイナリエンコードの処理を提供する ● 構造体とバイト列をマッピングできる ○ https://play.golang.org/p/o48Yv7hk-h ● Go1.9でmath/bitsが入る ○ ビット演算系の便利関数 ○ http://tip.golang.org/pkg/math/bits/ 11
  12. 12. 8.x/text パッケージ ■ テキスト処理などを提供する ● 日本語の文字コードに対応 ○ https://golang.org/x/text/encoding/japanese ○ EUCJP, ISO2022JP, ShiftJIS に対応 ● 多言語化の機能を提供 ○ https://godoc.org/golang.org/x/text/language ○ https://godoc.org/golang.org/x/text/currency ● tranform.Transformerが便利 ○ ストリームのまま変換できる ○ https://godoc.org/github.com/tenntenn/text/transf orm 12
  13. 13. 9.flag パッケージ ■ コマンドライン引数に関する機能を提供 ● オプションパースが便利 ● flag.Argsでオプション以外の引数が取れる ● ポインタを使ったいい例 ○ https://golang.org/pkg/flag/ 13
  14. 14. 10.path/filepath パッケージ ■ ファイルパスに関係する処理を提供する ● ¥や/を意識しないでいい ○ https://play.golang.org/p/MtybjFBVza ○ Windowsでもちゃんと動く ● OS関係ない場合はpathを使う ● filepath.Walkが便利 ○ 再帰的にディレクトリを読んでいく ○ 1階層だけならioutil.ReadDirが便利 14
  15. 15. 11.text/template パッケージ ■ テンプレート機能を提供 ● html/templateはHTML特化版 ● コマンドライン引数に使うと便利 ○ https://dave.cheney.net/2014/09/14/go-list-your-s wiss-army-knife ● コードジェネレーションにも便利 ○ go testでも使われている ○ https://github.com/golang/go/blob/master/src/cmd /go/internal/test/test.go#L1500 15
  16. 16. 12.testing パッケージ ■ テスティングライブラリ ● go testでユニットテストが実行できる ● Go1.7からサブテストが可能 ○ https://blog.golang.org/subtests ● テストを並列で実行可能 ○ t.Paralellを使う ● race detectorが使える ○ Goルーチン間で同じ変数にアクセスしてないか ● カバレッジがとれる ○ -coverをつけて実行 16
  17. 17. 13.net/http パッケージ ■ HTTPサーバ/クライアントを提供する ● http.Handlerを実装すればよい ● インタフェース実装の良い例 ○ http.HandlerFuncは関数に実装させている ○ インタフェースの実装パターン ● 重量なWebフレームワークは必要ない ○ ルーティングくらい ○ 学習しやすい ● テストしやすい 17
  18. 18. 14.net/http/httptest パッケージ ■ HTTPサーバのテストで使える機能を提供 ● http.ResponseWriterがインタフェース である利点を活かしている ○ https://golang.org/pkg/net/http/httptest/#Respons eRecorder ● ハンドラのテストが用意 ● httpdocも便利 ○ https://github.com/mercari/go-httpdoc 18
  19. 19. 15.sync パッケージ ■ ロックなどの機能を提供 ● sync.WaitGroupが便利 ○ https://golang.org/pkg/sync/#example_WaitGroup ○ 複数のGoルーチンの処理を待つことができる ● sync.Onceが便利 ○ https://golang.org/pkg/sync/#example_Once ○ 1回だけ実行したい場合に使える 19
  20. 20. 16.context パッケージ ■ コンテキスト機能を提供する ● 複数のGoルーチンをまたいだキャンセル機 能などに使える ○ Go1.7のcontextパッケージ ● context.Contextが強力 ○ インタフェースなので拡張しやすい ● errgroupパッケージも便利 ○ https://godoc.org/golang.org/x/sync/errgroup 20
  21. 21. 17.image パッケージ ■画像処理を提供するパッケージ ● image.Imageがインタフェース ○ 実装すればなんでも画像となる ● pngやjpeg、gifなどに対応している ● 基本的な機能は提供されている 21
  22. 22. 18.x/image パッケージ ■画像処理を提供するパッケージ ● 標準パッケージではたりない機能を提供 ● いろんな形式に対応している ○ https://godoc.org/golang.org/x/image ● x/image/drawが便利 ○ 描画に関する機能を提供している ○ https://godoc.org/golang.org/x/image/draw ● フォントに関する機能も提供している ○ https://godoc.org/golang.org/x/image/font 22
  23. 23. 19.reflect パッケージ ■ リフレクションの機能を提供する ● https://www.slideshare.net/takuyaueda96 7/2016-go#101 ● structタグにアクセスする唯一の方法 ● 使い所を間違えなければかなり便利 ● 遅いので乱用はいけない ● ちゃんとチェックしてパニックを起こさないよう にする 23
  24. 24. 20.go パッケージ ■ 静的解析の機能を提供する ● goパッケージで簡単に静的解析して世界を 広げよう ● 抽象構文木が取得できる ● 式単位でもパースできる ● 型チェックもできる ● 自作開発ツールも作れる ● 物によっては製品に使える 24
  25. 25. まとめ ■ Goはたくさんのパッケージを提供している ● https://www.slideshare.net/takuyaueda96 7/2016-go#101 ● 色々使ってみると楽しい ● 実装自体も勉強になる ● goやreflectパッケージも食わず嫌いは良 くない 25
  26. 26. Thank you! twitter: @tenntenn Qiita: tenntenn connpass: tenntenn 26

×