kanga333.b?log

雑な記録

golangで設定ファイルを環境変数に対応させる

背景

  • goでagentを作っている
  • yamlから設定を読ませる作りにした
  • コンテナで動かすことも考えて、環境変数で設定差し込みたいなぁ

対応

ここに全て書いてあった。

go: Using environment variables in configuration files - M. Tarık Yurt

ioutilでReadFileした後に、string型にしてos.ExpandEnvを一回噛ませて、Unmarshalすればよいだけ。超簡単。 つまりこんな感じ。

func LoadFile(filename string, v interface{}) error {
    content, err := ioutil.ReadFile(filename)
    if err != nil {
        return err
    }
    expandContent := []byte(os.ExpandEnv(string(content)))
    err = yaml.UnmarshalStrict(expandContent, v)
    if err != nil {
        return fmt.Errorf("parsing YAML file %s: %v", filename, err)
    }

    return nil
}

先人の知恵に感謝。