Goでコマンドライン引数と環境変数の両方からflagを設定したい - Qiita
Goで実装したプログラムでオプションをコマンドライン引数から取るには標準の `flag` パッケージを使いますが、値を環境変数からも読みたいことがあります。(特に Docker で動かす場合) htt...
http://qiita.com/sfujiwara/items/f177d85e9c10f4c34fb6
実は結構簡単に出来ます。github.com/namsral/flag
に依存したくない場合や github.com/namsral/flag
が実は flag 互換で無かった、なんて問題が見付かった場合に使えるハックです。
オリジナルのコード
package main
import (
"flag"
"fmt"
)
func main() {
var age int
flag.IntVar(&age, "age", 20, "your age")
flag.Parse()
fmt.Println(age)
}
これに5行(importも入れると実際は7行)足します。
package main
import (
"flag"
"fmt"
"os"
"strings"
)
func main() {
var age int
flag.IntVar(&age, "age", 20, "your age")
flag.VisitAll(func(f *flag.Flag) {
if s := os.Getenv(strings.ToUpper(f.Name)); s != "" {
f.Value.Set(s)
}
})
flag.Parse()
fmt.Println(age)
}
こうする事で
簡単に環境変数から値を上書きできる様になります。