GoでCLIツールを作るとき、いつもspf13/pflagを使ってオプションを実装している。
spf13/pflagは標準パッケージのflagと同じインターフェイスを持ちつつ、-hと--helpのようなよくある形式のオプションを簡単に実装できる。標準パッケージのflagでは、-helpのような形式になってしまう。
使い方
func main() {
  version := pflag.BoolP("version", "v", false, "show version")
  pflag.Parse()
  if pflag.NArg() == 0 {
    pflag.Usage()
    os.Exit(1)
  }
  if *version {
    fmt.Println("1.0.0")
    return
  }
  switch pflag.Arg(0) {
  case "list":
    // snip
  default:
    fmt.Fprintf(os.Stderr, "subcommand not found: %s\n", pflag.Arg(0))
    os.Exit(1)
  }
}
% sample
Usage of sample:
  -v, --version   show version
pflag.BoolPのようにflagパッケージの関数名にPがついた関数をつかうと、よくある形式のオプションを追加できる。pflag.Usage()でヘルプメッセージを生成する。NArg()やArg()などの関数はflagパッケージにあるものと同じなので、覚えていることをそのまま使える。