Profiler labels in Go · Go, the unwritten parts
Go 1.9の新機能としてProfiler Labelsが追加されます。
CPUプロファイラの収集データにラベルを追加することが出来るようになり、
例えば一般的なWebサーバにgoroutineでハンドラが分割された /user
と /top
が存在する場合、
それぞれのgoroutineに対して /user
/top
のラベルを貼っておけば、pprofのREPLから tags
を実行することで各々のCPUプロファイラ結果が見れるようになります。便利!
この辺りを記事書いている方が少ないので、改めて別記事として書こうと思います。
GitHub - tidwall/shiny: Alternative server framework for Go using I/O multiplexing
Goの新しいWAFなんですが、一番特徴的なのがI/O多重化の際にnetパッケージを用いず、直接epoll / kqueueを呼んでいるところですね。
作者のtidwall氏が挙げている特徴は以下の4つ。
- 1つのエントリポイントと4つのイベント関数のみのシンプルなAPI
- メモリ使用量が少ない
- 非常に高速なシングルスレッドサポート
- netパッケージでイベントをシミュレートすることによって、epoll / kqueueのないOSをサポート
今後どうなるか見守りたいWAFになりそうですね。
Golang Internals Part 2: Nice benefits of named return values
条件分岐によって、初期化されたオブジェクトを返すような処理の際には名前付き結果パラメータを使おうぜというお話。
ちょっとの違いで、コンパイラの生成コードがここまでスッキリするとは驚きですね。
また、deferで呼び出す関数内で名前付き結果パラメータを参照することが出来るので、
package main import ( "fmt" "strconv" ) func main() { i := incrInt(1) fmt.Println(strconv.Itoa(i)) // print 2 } func incrInt(i int) (result int) { defer func() { result++ }() return i }
といった面白いコードが書けたりします。
ちょっと少ないですが、今回はここまで。