Golang のかゆいところに手が届きそうで届かないライブラリを公開した

Golang を書いてて思うのは

  • slice の操作が面倒 (Generics無いから、型ごとに書かないといけない)
  • map のキーのみ、値のみの配列が欲しい
  • error handling boilerplate

他にもいろいろあるけど。
とりあえず、自分が「今作ってて、あるといいな」と思ったヘルパーをまとめた。

github.com

たとえば、slice なら

array := []int{1, 2, 3, 4, 5}
result := slice.Filter(array, func(i int) bool {
    return array[i]%2 == 1
}).([]int)
// result == [1, 3, 5]

error handling なら

defer die.RevivalDetail(func(file string, line int, msg interface{}) {
    log.Printf("error: file=%s, line=%d, msg=%v", file, line, msg)
})

r, err := os.Open("hoge")
die.IfErr(err)
defer r.Close()

buf := make([]byte, 10000)
n, err := r.Read(buf)
die.IfErr(err)

このように、簡潔に書けるようになる。
内部的には reflect / interface{} つかったり panic() / recover() つかったりしているので、動作は遅めです。