golangで設定ファイルを環境変数に対応させる
背景
対応
ここに全て書いてあった。
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 }
先人の知恵に感謝。