handlename's blog

コード片など

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)
}

あ、あれ、コード長くなってる?? ま、まあ引数が多くなった時に定義と保存先をまとめて宣言できると便利なんじゃないかな・・・。

いまのところ自分が必要になった型しか実装してないので、 stringintfloat64bool しか受け取れない。 あと、テストがない。 flag パッケージのテストを読んでみよう。