go-opts というパッケージを書いた
- go 1.3.1
go 言語でコマンドライン引数を受け取る場合、 flag
というモジュールを使う。
こんなコードを書くと --xxx
/ -xxx
形式でコマンドライン引数を受け取ることができる。
package main import ( "flag" "fmt" ) func main() { var hoge int flag.IntVar(&hoge, "hoge", 10, "hoge value") flag.Parse() fmt.Printf("hoge = %d\n", hoge) }
$ go run sample_flag.go --hoge=1 hoge = 1 $ go run sample_flag.go hoge = 10
引数の種類が増えると煩雑になるし、管理も面倒だなーと思ったので、 楽ちんに書けるパッケージを書いてみた。
こんなふうに書ける。
package main import ( "fmt" "github.com/handlename/go-opts" ) type myOpts struct { Hoge int `flag:"hoge" default:"10" description:"hoge value"` } func main() { o := myOpts{} opts.Parse(&o) fmt.Printf("hoge = %d\n", o.Hoge) }
あ、あれ、コード長くなってる?? ま、まあ引数が多くなった時に定義と保存先をまとめて宣言できると便利なんじゃないかな・・・。
いまのところ自分が必要になった型しか実装してないので、
string
、 int
、 float64
、 bool
しか受け取れない。
あと、テストがない。 flag
パッケージのテストを読んでみよう。