1.7 プログラムを制御する引数

プログラムがユーザーの意図をまったく受け付けずに走り続けることはまれです。サーバーであれば、起動してからブラウザなどからのリクエストを受け取り、それに応じてサービスを提供します。起動時にも、どのように動いて欲しいかの設定が渡されます。入力ファイルとしてJSONやCSV、Excelといったファイル形式でデータを渡すこともありますが、細かな設定はコマンドライン引数と環境変数の2つを通じて渡されることが多いでしょう。本節では起動時のオプションとして、コマンドライン引数と環境変数の扱い方について紹介します。

1.7.1 コマンドライン引数

Goは標準ライブラリでコマンドライン引数を処理するflagパッケージを提供しています。これはシンプルなパッケージで、数値や文字列を受け取るだけであればこれを使えば問題ありません。

var (
	FlagStr = flag.String("string", "default", "文字列フラグ")
	FlagInt = flag.Int("int", -1, "数値フラグ")
)

func main() {
	flag.Parse()
	log.Println(*FlagStr)
	log.Println(*FlagInt)
	log.Println(flag.Args())
}

しかし、POSIXスタイルの短縮記号と長い引数名への対応、短縮記号をつなげた記法、必須フラグのチェック、gitコマンドのようなサブコマンドを持つ複雑なケースには向いていません。このような目的のため、いくつか人気のライブラリがあります。

  • gopkg.in/alecthomas/kingpin.v2

  • github.com/spf13/cobra ...