SlideShare a Scribd company logo
オススメの
標準・準標準
パッケージ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.
自己紹介
メルカリ/ソウゾウ
上田拓也
twitter: @tenntenn
■ コミュニティ活動
Google Cloud Platform User Group (GCPUG) Tokyo
Goビギナーズ
golang.tokyo
Go Conference
■ 業務
GAE/Goでメルカリカウルを作ってます
GoやGCPコミュニティを盛り上げる仕事
Gopherを描く仕事(LINEスタンプ)
2
Goの標準パッケージ
■ さまざまな機能が提供されている
● HTTPサーバ/クライアント
● 文字列処理
● 暗号化
● 画像処理
3
$ go version
go version go1.8.3 darwin/amd64
$ go list std | grep -v vendor | wc -l
161
■ かなりの数のパッケージがある
Goの準標準パッケージ
■ golang.org/xで提供されるパッケージ
● https://godoc.org/-/subrepo
● サーバ類
● 文字列処理
● 画像処理
4
■ かなりの数のパッケージがある
● 450パッケージ以上はある
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
2.io パッケージ
■ IO関係の基本的な型が定義されている
● io.Readerとio.Writerが強力
○ インタフェースの良い例
● io.TeeReaderとかもあり便利
○ https://play.golang.org/p/mHmstVuvfG
6
3.io/ioutil パッケージ
■ IO関係の便利関数がある
● ioutilという名前が与えてくれる勇気
○ utilって名前はよくない
○ 文脈が伴えばOK
● NopCloserが便利
○ https://play.golang.org/p/EkAbmCZqcH
● ReadAllはあんまり使わない
○ ストリームのままやろう
7
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
5.bytes パッケージ
■ stringsパッケージの[]byte版
● stringsにあるものはだいたいある
● bytes.Readerが便利
○ []byteをio.Readerに変換できる
● bytes.Bufferが便利
○ io.Readerとio.Writerを実装している
○ ゼロ値で使える
○ https://play.golang.org/p/w2BtSCUg1w
9
6.bufio パッケージ
■ バッファリングされたIO機能を提供
● bufio.Scannerが便利
○ https://play.golang.org/p/34k4uJBIm3
○ 1行ずつ読み込むのに重宝する
● bufio.SplitFuncでカスタマイズ
○ https://play.golang.org/p/OXtPVl4kae
10
7.encoding/binary パッケージ
■ バイナリエンコードの処理を提供する
● 構造体とバイト列をマッピングできる
○ https://play.golang.org/p/o48Yv7hk-h
● Go1.9でmath/bitsが入る
○ ビット演算系の便利関数
○ http://tip.golang.org/pkg/math/bits/
11
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
9.flag パッケージ
■ コマンドライン引数に関する機能を提供
● オプションパースが便利
● flag.Argsでオプション以外の引数が取れる
● ポインタを使ったいい例
○ https://golang.org/pkg/flag/
13
10.path/filepath パッケージ
■ ファイルパスに関係する処理を提供する
● ¥や/を意識しないでいい
○ https://play.golang.org/p/MtybjFBVza
○ Windowsでもちゃんと動く
● OS関係ない場合はpathを使う
● filepath.Walkが便利
○ 再帰的にディレクトリを読んでいく
○ 1階層だけならioutil.ReadDirが便利
14
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
12.testing パッケージ
■ テスティングライブラリ
● go testでユニットテストが実行できる
● Go1.7からサブテストが可能
○ https://blog.golang.org/subtests
● テストを並列で実行可能
○ t.Paralellを使う
● race detectorが使える
○ Goルーチン間で同じ変数にアクセスしてないか
● カバレッジがとれる
○ -coverをつけて実行
16
13.net/http パッケージ
■ HTTPサーバ/クライアントを提供する
● http.Handlerを実装すればよい
● インタフェース実装の良い例
○ http.HandlerFuncは関数に実装させている
○ インタフェースの実装パターン
● 重量なWebフレームワークは必要ない
○ ルーティングくらい
○ 学習しやすい
● テストしやすい
17
14.net/http/httptest パッケージ
■ HTTPサーバのテストで使える機能を提供
● http.ResponseWriterがインタフェース
である利点を活かしている
○ https://golang.org/pkg/net/http/httptest/#Respons
eRecorder
● ハンドラのテストが用意
● httpdocも便利
○ https://github.com/mercari/go-httpdoc
18
15.sync パッケージ
■ ロックなどの機能を提供
● sync.WaitGroupが便利
○ https://golang.org/pkg/sync/#example_WaitGroup
○ 複数のGoルーチンの処理を待つことができる
● sync.Onceが便利
○ https://golang.org/pkg/sync/#example_Once
○ 1回だけ実行したい場合に使える
19
16.context パッケージ
■ コンテキスト機能を提供する
● 複数のGoルーチンをまたいだキャンセル機
能などに使える
○ Go1.7のcontextパッケージ
● context.Contextが強力
○ インタフェースなので拡張しやすい
● errgroupパッケージも便利
○ https://godoc.org/golang.org/x/sync/errgroup
20
17.image パッケージ
■画像処理を提供するパッケージ
● image.Imageがインタフェース
○ 実装すればなんでも画像となる
● pngやjpeg、gifなどに対応している
● 基本的な機能は提供されている
21
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
19.reflect パッケージ
■ リフレクションの機能を提供する
● https://www.slideshare.net/takuyaueda96
7/2016-go#101
● structタグにアクセスする唯一の方法
● 使い所を間違えなければかなり便利
● 遅いので乱用はいけない
● ちゃんとチェックしてパニックを起こさないよう
にする
23
20.go パッケージ
■ 静的解析の機能を提供する
● goパッケージで簡単に静的解析して世界を
広げよう
● 抽象構文木が取得できる
● 式単位でもパースできる
● 型チェックもできる
● 自作開発ツールも作れる
● 物によっては製品に使える
24
まとめ
■ Goはたくさんのパッケージを提供している
● https://www.slideshare.net/takuyaueda96
7/2016-go#101
● 色々使ってみると楽しい
● 実装自体も勉強になる
● goやreflectパッケージも食わず嫌いは良
くない
25
Thank you!
twitter: @tenntenn
Qiita: tenntenn
connpass: tenntenn
26

More Related Content

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