go言語でのコマンドライン引数扱い
今回はgo言語でのコマンドラインの引数の使い方についてまとめていきたいと思います!!
そういえば使い方が分からなかったので調べてみました。
備忘録としてまとめておきます。
■コマンド使用にあたり事前準備
go言語でコマンドラインの引数を用いるにあたり、
flagパッケージを用いるのが良いとのこと。
まずはこちらのコマンドでインストール。
go get flag
flagパッケージを用いた引数指定の方法と、型をオプションで指定する方法と指定しない方法の2つがあります。
それぞれ書いていきたいと思います。
■型を指定しない場合
まずはコードです。
package main import ( "flag" "fmt" ) func main() { flag.Parse() args := flag.Args() fmt.Println(args) }
では、コードの解説です。
flag.Parse() args := flag.Args()
にて引数を取得。
fmt.Println(args)
で引数をそのまま出力。以上です。
こちらのように、コマンドを実行すると、
go run command.go 10 Hello false
こちらのような結果になります。
[10 Hello false]
配列で格納されているので、
fmt.Println(args[0])
として、先ほどのコマンドを実行すると、
10
が得られます。
■型を指定する場合
まずはコードです。
package main import ( "flag" "fmt" ) func main() { var ( i = flag.Int("int", 0, "int flag") s = flag.String("str", "default", "string flag") b = flag.Bool("bool", false, "bool flag") ) flag.Parse() fmt.Println(*i, *s, *b) }
先ほどの型指定しない場合と比較して、
var ( i = flag.Int("int", 0, "int flag") s = flag.String("str", "default", "string flag") b = flag.Bool("bool", false, "bool flag") )
が異なります。
こちらのコードですが、
flag.型("コマンド実行時のオプション名","デフォルト値","型")
となっております。
こちらのように、コマンドを実行すると、
go run command.go -int 10 -str Hello -bool false
こちらのような結果になります。
10 Hello true
先ほど解説しました通り、
- intでint型の変数、-strで文字列、-boolでフラグ
になります。
もし引数を与えない、要するに
go run command.go
と実行すると
0 default false
となります。
先ほどコードでデフォルト指定した値が得られていることが分かります。
では次に、
go run command.go -Int 10 -str Hello -bool false
というように定義していないオプションを指定します。
すると、
Usage of /tmp/go-build574500599/b001/exe/command: -bool bool flag -int int int flag -str string string flag (default "default") exit status 2
といったようにオプションエラーになります。
最後に、
go run command.go -int a -str Hello -bool false
といったように型と異なる変数を与えた場合、
invalid value "a" for flag -int: strconv.ParseInt: parsing "a": invalid syntax Usage of /tmp/go-build025687152/b001/exe/command: -bool bool flag -int int int flag -str string string flag (default "default") exit status 2
というように、エラーが発生します。