Go言語_コマンドライン引数
os.Argsの利用
コマンドライン引数はosパッケージのArgs変数で利用できます。
os.Argsはstring型のスライスで定義されており、コマンドパラメータが代入されます。
package main
import (
"fmt"
"os"
)
func main() {
// 引数の数を確認する。
if len(os.Args) < 2 {
fmt.Println("ERROR: 引数を指定してください。")
os.Exit(1)
}
// os.Argsを確認する。
fmt.Println(os.Args)
// 個別引数へのアクセス。
fmt.Printf("実行ファイル名: %s\n", os.Args[0])
for i := 1; i < len(os.Args); i++ {
fmt.Printf("引数%d: %s\n", i, os.Args[i])
}
}
flagパッケージを利用する
コマンドオプションを指定するといった複雑な処理を行う場合はflagパッケージを使用します。
数値指定オプションの場合
flag.Intは、Int型の値をとるオプションを定義するflagパッケージの関数です。
- 第一引数はオプション名です
- 第二引数はオプションのデフォルト値です。オプションを指定しない場合は、デフォルト値がオプションの値に入ります。
- 第三引数は、オプションの説明を記述しています。
package main
import (
"flag"
"fmt"
)
func main() {
var intOpt = flag.Int("n", 0, "Specify the number.")
// 解析のために必ずパースを実行する。
flag.Parse()
// オプションで指定された値を取り出す。
fmt.Printf("n = %d\n", *intOpt)
}
実行結果は以下の通りです。
$ main.exe
n = 0
$ main.exe -n 3
n = 3
$ main.exe -n 18
n = 18
helpオプション「-h/-help」を指定すると、Usageメッセージが表示されます。
$ main.exe -h
Usage of main.exe:
-n int
Specify the number.
文字列指定オプションの場合
flag.Stringは、String型の値をとるオプションを定義するflagパッケージの関数です。
使い方はflag.Int()と同じです。以下ではオプションを併用しています。
package main
import (
"flag"
"fmt"
)
var (
intOpt = flag.Int("n", 0, "help message for n option")
strOpt = flag.String("s", "", "help message for s option")
)
func main() {
flag.Parse()
fmt.Printf("n = %d\n", *intOpt)
fmt.Printf("s = %s\n", *strOpt)
}
実行例は以下の通りです。helpオプションも自動で設定されています。
$ main.exe
n = 0
s =
$ main.exe -s "The Go Programming Language"
n = 0
s = The Go Programming Language
$ main.exe -s "The Go Programming Language" -n 7
n = 7
s = The Go Programming Language
フラグでないコマンドライン引数
flag.Arg()やflag.Args()でフラグでないコマンドライン引数へアクセスできます。
package main
import (
"flag"
"fmt"
)
var (
intOpt = flag.Int("n", 0, "help message for n option")
strOpt = flag.String("s", "", "help message for s option")
)
func main() {
flag.Parse()
fmt.Printf("n = %d\n", *intOpt)
fmt.Printf("s = %s\n", *strOpt)
// フラグでないコマンドライン引数の数
fmt.Println(flag.NArg())
// フラグでないコマンドライン引数へのアクセス
fmt.Println("args:", flag.Args())
for i := 0; i < flag.NArg(); i++ {
fmt.Printf("引数%d: %s\n", i+1, flag.Arg(i))
}
}
その他のオプション型について
flagパッケージでは様々な型のオプションが用意されています。
bool型やUINT型といった指定方法も準備されているので、自前の作りこみが不要になります。
http://golang.jp/pkg/flagを参照して、利用していきます。
関連ページ
- Go言語_プログラムの作成
- Go言語_コマンドライン引数
- Go言語_変数と型
- Go言語_コンポジット型
- Go言語_制御構文
- Go言語_関数
- Go言語_演算子
- Go言語_メソッド
- Go言語_インターフェース