go言語の学習メモ4(コマンドライン)
osパッケージを使用
smaple1.go
package main import ( "fmt" "os" ) // コマンドライン変数を取得 func main(){ // 件数 _len := len(os.Args) fmt.Println("count:", _len) fmt.Println("command:", os.Args) if _len > 1 { for i := 0;i<=_len-1;i++{ fmt.Println(" ", i, ":", os.Args[i]) } } }
↓
[vagrant@localhost golang]$ go run sample1.go count: 1 command: [/tmp/go-build646511233/command-line-arguments/_obj/exe/sample1] [vagrant@localhost golang]$ go run sample1.go 111 222 333 count: 4 command: [/tmp/go-build126150742/command-line-arguments/_obj/exe/sample1 111 222 333] 0 : /tmp/go-build126150742/command-line-arguments/_obj/exe/sample1 1 : 111 2 : 222 3 : 333 [vagrant@localhost golang]$
※osパッケージのArgsで実行時引数を取得できる
0番目が自身のスクリプト名でそれ移行が半角スペースで区切って配列で取得できるみたい
flagパッケージ
sample2.go
package main import ( "fmt" "flag" ) // 単純に引数の数と文字列を表示 func main(){ // パース flag.Parse() // 数を表示 fmt.Println(flag.NArg()) // 文字列 fmt.Println(flag.Args()) }
↓
[vagrant@localhost golang]$ go run sample2.go 111 222 333 3 [111 222 333] [vagrant@localhost golang]$
※この場合は先頭のsample2.goが含まれないよう
sample3.go
パースしてみる
package main import ( "fmt" "flag" ) // 単純に引数の数と文字列を表示 func main(){ // 結果はポインタらしい var f = flag.Int("f", 100, "help message for f") var b = flag.Bool("b", false, "help message for b") var s = flag.String("s", "default", "help message for s") // パース flag.Parse() // 数を表示 fmt.Println(flag.NArg()) // 文字列 fmt.Println(flag.Args()) // ポインタ fmt.Println(*f) fmt.Println(*b) fmt.Println(*s) }
※flag.Int(引数名, 未定義時の初期値, ヘルプ時のメッセージ)
help
[vagrant@localhost golang]$ go run sample3.go --help Usage of /tmp/go-build778696544/command-line-arguments/_obj/exe/sample3: -b=false: help message for b -f=100: help message for f -s="default": help message for s exit status 2 [vagrant@localhost golang]$
未入力の場合
[vagrant@localhost golang]$ go run sample3.go 0 [] 100 false default [vagrant@localhost golang]$
引数を指定した場合
[vagrant@localhost golang]$ go run sample3.go -f 88 -b -s abcde vvv 555 2 [vvv 555] 88 true abcde [vagrant@localhost golang]$