m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

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]$