覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Go言語 - os.Argsでコマンドラインパラメータを受け取る

コマンドラインで与えられたパラメータはosパッケージのArgsで受け取ることができます。
C言語のmain関数やJavaのmainメソッドでは引数でコマンドラインパラメータを受け取りますが、Golangでは引数ではなくos.Argsを通じて取得することになります

os.Argsは以下の特徴を持ちます

  • os.Argsはstring型のスライス
  • 0番目の要素には実行したコマンド名が格納される
  • 1番目以降の各要素にコマンドに渡された各引数が格納される


以下でos.Argsを利用するプログラムを作成して、実際にコマンドとして実行して動きを確認してみます


■サンプルコード

os.Argsの要素数と中の値を表示するプログラムになっています

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Printf("args count: %d\n", len(os.Args))
    fmt.Printf("args : %#v\n", os.Args)

    for i, v := range os.Args {
        fmt.Printf("args[%d] -> %s\n", i, v)
    }
}


■実行結果

○引数として param1 と param2 を与える

C:\go_tmp\osargstrial.exe param1 param2
args count: 3
args : []string{"osargstrial.exe", "param1", "param2"}
args[0] -> osargstrial.exe
args[1] -> param1
args[2] -> param2

先頭要素にはコマンド名が格納され、それ以降の要素に引数の値が格納されています


○引数として param1 と param2 と "aaaa bbbb" と -version を与える

C:\go_tmp\osargstrial.exe param1 param2 "aaaa bbbb" -version
args count: 5
args : []string{"osargstrial.exe", "param1", "param2", "aaaa bbbb", "-version"}
args[0] -> osargstrial.exe
args[1] -> param1
args[2] -> param2
args[3] -> aaaa bbbb
args[4] -> -version

"(ダブルクォート)で囲った引数は、os.Argsの1要素で扱われます


○引数なし

C:\go_tmp\osargstrial>osargstrial.exe
args count: 1
args : []string{"osargstrial.exe"}
args[0] -> osargstrial.exe

引数無しコマンドが実行された場合は、os.Argsにはコマンド名のみが格納されます


補足

os.Argsでコマンドラインパラメータを扱うことはできますが、もう少し高機能なflagパッケージというものも提供されいます。
flagパッケージの使い方については以下エントリを参照ください。