spf13/pflagの使い方

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パッケージにあるものと同じなので、覚えていることをそのまま使える。