どういうこと
golangではコマンドラインオプションをflagパッケージを使ってパースすることができる。
しかし、オプションに-h、--helpを指定すると、以下のようにexit status2と出てしまう。
なぜこんな仕様なのか...
$ go run flagSample.go -h
Usage:
-n int
number to use (default 1234)
exit status 2
これを出ないようにしたい。
対応策
flag.Usage を使ってUsageを表示するときに動かす関数を指定してあげ、その関数内で os.exit(0) を呼ぶと-h、--helpを指定したときの statusコードは0となり、exit status2は出なくなる。以下にコード例を示す。
コード
これは、-nで指定した数字を表示するだけのコマンドラインツールのコードである。flag.Usageで指定したUsage()内でos.exit(0)を呼んでいるので、exit status2 は出ない。
package main import ( "flag" "fmt" "os" ) var number int func usage() { fmt.Println("Usage:") flag.PrintDefaults() os.Exit(0) } func init() { const defaultNumber = 1234 flag.IntVar(&number, "n", defaultNumber, "number to use") flag.Usage = func() { usage() } } func main() { flag.Usage = func() { usage() } flag.Parse() fmt.Println("flag test") fmt.Printf("Number: %d\n", number) }
実行結果
$ go run flagSample.go -n 6666
flag test
Number: 6666
$ go run flagSample.go -h
Usage:
-n int
number to use (default 1234)