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