uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

Go言語でコマンドライン引数を取り扱う

Go言語でコマンドライン引数を取り扱う際のメモ。

flag - The Go Programming Language

結論から、flagパッケージをimportすれば万事解決。

os.Argsでコマンドラインの引数を取ることも可能だけど、 機能が全然違うのでちょっと凝ったことをしたいならflagを使うのがいい。

package main

import (
        "fmt"
        "flag"
        "os"
)

func main(){
        f := flag.Int("flag1", 0, "flag 1")
        flag.Parse()

        fmt.Println("os.Args: ", os.Args)
        fmt.Println("compare")
        fmt.Println("flag.Args: ", flag.Args())
        if *f == 100 {
            fmt.Println("Hello")
        }
}
% go build sample.go 

% ./sample  a b c
os.Args:  [./sample a b c]
compare
flag.Args:  [a b c]

flagパッケージを使うと指定したオプションとそれ以外に指定したパラメータは分けて返してくれる機能が備わっている

% ./sample  -flag1=1 a  
os.Args:  [./sample -flag1=1 a]
compare
flag.Args:  [a]

あと、ヘルプも-hで表示してくれる。

% ./sample   -h   
Usage of ./sample:
  -flag1=0: flag 1

pythonのargparse, optparse よりかは柔軟性が落ちる印象だけど普通のコマンドラインツール作るにはこれでかなり間に合いそうな印象。

参考

Go言語のflagパッケージを使う - uragami note