2017/06/09

Recent entries from same category

  1. gRPC のサービスが簡単に作れるライブラリ「lile」
  2. CreateFile で FILE_SHARE_DELETE を指定するとどうなるか
  3. Visual Studio Code で ssh 先のファイルを編集する方法
  4. 虫が入り込むその瞬間
  5. ダウンロードの進捗プログレスバー実装は可能か

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

こうする事で

flagenv

簡単に環境変数から値を上書きできる様になります。


blog comments powered by Disqus