Go言語LT大会! 「最近、Go言語始めました」の会に参加してきました。
以下自分用のメモです。
概要
Go言語入門者のLT大会&懇親会
- 開催日: 2017/6/5
- 場所: レバレジーズ株式会社
おススメ・標準・準標準パッケージ20選
上田拓也 氏 (メルカリ/ソウゾウ)
- Go標準のパッケージ
- 様々な機能が提供されている
- HTTPサーバ/クライアント
- 文字列処理
- 暗号化
- 画像処理
- 160パッケージぐらいある
- 様々な機能が提供されている
- Go標準のパッケージ
- golang.org/xで提供されるパッケージ
- 450パッケージ以上ある
fmt
パッケージ- 書式付きプリント機能を提供する
- %T, %q %vあたりが便利
- %[1]d, %[2]dとかでN番目の値が出せる。引数の順番を指定できる。引数を使いまわすこともできる
- fmt.Stringerが便利
- JavaのtoString的な役割のインターフェース
io
パッケージ- IO関係の基本的な型が定義されている
- io.Readerとio.Writerが強力
- インターフェースの良い例
- io.TeeReaderとかもあり便利
- UNIXのteeコマンド的なもの
- io.Readerとio.Writerが強力
- IO関係の基本的な型が定義されている
io/ioutil
パッケージ- IO関係の便利関数がある
- NopCloserが便利
- ReadAllhあんまり使わない
- ストリームのままやろう
strings
パッケージ- 文字列に関する処理を提供
- strings.Readerが便利
- 文字列をio.Readerに変換してくれる
- strings.Fieldsが便利
- ホワイトスペースでいい感じに区切ってくれる
bytes
パッケージ- strringsにあるものはだいたいある
- bytes.Readerが便利
- []byteをio.Readerに変換できる
- bytes.Bufferが便利
- ゼロ値で扱える
bufio
パッケージ- bufio.Scannerが便利
- bufio.SplitFuncでカスタマイズ
encoding/binary
パッケージ- 構造体とバイト列をマッピングできる
- Go1.9でmath/bitsが入る
x/text
パッケージ- 日本語の文字コードに対応(EUCJO,Shift-JIS,ISO2022JPに対応)
- 多言語化の機能を提供
- transform.TransFormerが便利
- ストリームのまま変換できる
- 実際の例を何回か読まないと理解が難しい
flag
パッケージ- コマンドライン引数に関する機能を提供
- オプションパースが便利
- flag.Argsでオプション以外の引数が取れる
- ポインタの使用例としてGood
- コマンドライン引数に関する機能を提供
path/filepath
パッケージ- ファイルパスに関係する処理を提供する
- \や/を意識しなくてよい
- filepath.Walkが便利
- 再帰的にディレクトリを読んでいく
- ファイルパスに関係する処理を提供する
text/template
パッケージ- html/templateはHTML特化版
- コマンドライン引数に使うと便利
- コードジェネレーションにも利用できる
testing
パッケージ- go testでユニットテストが実行できる
- Go1.7からサブテストが可能
- テストを並列で実行可能
- t.Paralellを使う
- カバレッジが取れる
- -cover
net/http
パッケージ- HTTPサーバ.\/クライアントを提供する
- http.Handlerを実装すればよい
- インターフェース実装の良い例
- 重量なWebフレームワークは必要ない
- テストしやすい
- HTTPサーバ.\/クライアントを提供する
net/http/httptest
パッケージ- HTTPサーバのテストで使える機能を提供
- ハンドラのテストが便利
- httpdocも便利
- HTTPサーバのテストで使える機能を提供
sync
パッケージ- ロックなどの機能を提供
- sync.WaitGroupが便利
- sync.Onceが便利
- 1回だけ実行したい場合に楽
- ロックなどの機能を提供
context
パッケージ- 複数のGoルーチンをまたいだキャンセル機能などに使える
- context.Contextが強力
- インターフェースなので拡張しやすい
- errgroupパッケージも便利
image
パッケージ- 画像処理を提供するパッケージ
- image.Imageがインターフェース
- 実装すればなんでも画像として扱える
- pngやjpeg,gifなどに対応している
- image.Imageがインターフェース
- 画像処理を提供するパッケージ
x/image
パッケージ- 標準パッケージでは足りていない機能を提供
- x/image/drawが描画機能を提供してくれる
- フォントに関する機能も提供している
reflect
パッケージ- リフレクションの機能を提供する
- structタグにアクセスする唯一の方法
- 使いどころを間違えなければ便利。遅いので乱用はNG
- 食わず嫌いは良くない
- パニックが起こりなくるのでちゃんとチェックを行うこと
- リフレクションの機能を提供する
go
パッケージ- 静的解析の機能を提供する
- 抽象構文木(AST)が取得できる
- 式単位でもパースできる
- 型チェックもできる
- 自作開発ツールも作ることができる
- 静的解析の機能を提供する
Go開発合宿2017
@n0bisuke 氏
- Goを書く合宿
- いろんな人が集まってわいわいやるコミュニティ
- 合宿場所にした土善旅館は開発合宿プランを用意している
- 過去の合宿者の要望をもとにした優れた設備等がある
初心者がGoでCLIツールを作ってみて学んだこと
@syossan27 氏
- 作ったOSS
- kirimori
- torisetsu
- 初心者ならではの様々な失敗
- packageで分ける粒度が分からず1つのファイルにすべて突っ込む
- エラーハンドリング時に適当にpanicを使ったために自分がpani
- 構造体メソッドンに対してポインタレシーバを使わない
- やたら変数名を長くしてしまう
作って学ぶミニマムgolint
@minamijoyo 氏
- golint
- Goっぽくないコーディングスタイルを指摘してくれる
- どうやって検出しているのか?
- ただの辞書だった
- よくわからないのでgolint作ってみた
- 標準のgoパッケージを使う
j2hの紹介
@kanga333 氏
- j2hを作った
- JSONからHiveのDDLを出力してくれる
- gjson
- goでJSONを取り扱うライブラリの一つ
- result.TypeでJSONのタイプを取得できる
- ForReachで子要素に対して反復処理ができる
GoとLintのおいしい関係
@wata727 氏
- Lint
- コンパイラより詳細かつ厳密なチェック
- Golint
- Goのスタイルチェッカー
- (個人的に)Golintの良いところ:行の長さを制限しない
- Govet
- コンパイラよりも詳しい検査を行う
- Go Meta Linter
- セキュリティとかtypoのチェックとか
- goは標準パーサがある
- 新しいシンタックスにも追従してくれる
- Linterを作りやすい
- GoではLintを使おう。Linterを作るならGoでやろう
Golangちゃんと始めてから1カ月経ちました
@nntsugu 氏
- Datadog
- 次
- デザインファーストなFWのgoaで書く
- プチ合宿やりませんか?
We "Go" fast
@taison124 氏
- Goで開発
- 環境や作法が決まっていて迷いどころない
- 暗黙知が排除されている
- 標準のやり方でできる
- 環境や作法が決まっていて迷いどころない
- 本質的な問題解決に時間や情報を集中できる
個人的にこのLTが一番ためになりました!!
コネクションプールをGoでどう作ろうか調べた話
Jumpei Mano 氏
- golibmc
- 1つのコネクションをロックしながら使いまわしている
- ボトルネックになる
- memcached用コネクションプールを実装するためにdatabase/sqlの実装を読んだ
- 非常にいい勉強になった
- Go特有のchannelを使うことで実装がすっきりしている
ずっとRubyをやっていたエンジニアがGoに入門して挫折して再挑戦した話
@suzan2go 氏
- 敗因
- Go言語でRubyのようなオブジェクト指向をやろうとしてしまった
- Rubyのように楽に書く方法がないか探し求めてしまった
- 再挑戦
- GitHubでGo言語のアプリケーションを色々見てみる
- Go言語の設計についての記事を色々読んでみる
- Goに従ってみると楽しくなってきた
- GoDocが凄い
- Goに入ればGoに従え