Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

go言語でのコマンドライン引数扱い

今回はgo言語でのコマンドラインの引数の使い方についてまとめていきたいと思います!!

そういえば使い方が分からなかったので調べてみました。
備忘録としてまとめておきます。



■環境

go言語バージョン:go1.11.5 linux/amd64

■コマンド使用にあたり事前準備

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

というように、エラーが発生します。

■最後に

今回はgo言語のコマンドラインで引数を与える方法をまとめてみました。
flag使えば簡単に出来るので、用途によって使っていきたいと思います。