go で同じ flag を slice で受け取る

たまに go で同じ flag を slice で受け取りたくなるので書いた

github.com

こんな感じで使う。

var (
       strs = sliceflag.String(flag.CommandLine, "str", []string{}, "str")
)

func main() {
    flag.Parse()
    log.Println(*strs)
}
$ go run main.go ---str aaa --str bbb

flag package には Value という interface があって、Set(string) errorString() string を実装されてれば良いので、slice のポインタを返して、中では その slice に append するという感じになっている。 bool 以外の flag で提供されてるやつをひとまず実装した。