golangのflagパッケージでコマンドラインオプションを扱う
Goでコマンドラインオプションを扱う場合はflagパッケージを使う。
以下はechoの例
package main import ( "flag" "fmt" ) var ( nflag = flag.Bool("n", false, "print the trailing newline character") ) func main() { flag.Parse() var s string = "" for i := 0; i < flag.NArg(); i++ { if i > 0 { s += " " } s += flag.Arg(i) } if *nflag { s += "\n" } fmt.Println(s) }
nflagはポインタになるのでmain関数で参照する箇所では*nflagとしてデリファレンスする。
flag.NArgで引数の数が、flag.Arg(n)でそのindexの引数の値が取得できる。
もうひとつコマンドラインオプションを扱う方法があって、以下のように変数にinit関数で関連付ける。
package main import ( "flag" "fmt" ) var nflag bool func init() { flag.BoolVar(&nflag, "n", false, "print the trailing newline character") } func main() { flag.Parse() var s string = "" for i := 0; i < flag.NArg(); i++ { if i > 0 { s += " " } s += flag.Arg(i) } if nflag { s += "\n" } fmt.Println(s) }
この場合、main関数でのnflagは値になるのでデリファレンスは必要ない。