Вложенный кусочек структуры с гадюкой - PullRequest
0 голосов
/ 01 февраля 2019

Есть ли способ передать вложенный фрагмент произвольной структуры через переменные окружения?Приведенный ниже код прекрасно работает с файлом конфигурации yaml, но я не могу заставить его работать через env (для производства)

package main

import (
    "log"
    "strings"

    "github.com/spf13/viper"
)

type HostConfig struct {
    Host string `mapstructure:"host"`
    Port int    `mapstructure:"port"`
}

type Config struct {
    ClusterMode bool `mapstructure:"cluster_mode"`

    Hosts []HostConfig `mapstructure:"hosts"`
}

func main() {
    viper.SetEnvPrefix("service")

    replacer := strings.NewReplacer(".", "_")
    viper.SetEnvKeyReplacer(replacer)

    viper.AutomaticEnv()

    var cfg Config
    err := viper.UnmarshalKey("redis", &cfg)

    log.Printf("cfg: %+v\n\nerr: %+v", cfg, err)
}
$ SERVICE_REDIS={"cluster_mode":"true","hosts":[{"host":"abc","port":123}]} go run main.go
2019/02/01 12:50:53 cfg: {ClusterMode:false PoolSize:0 Hosts:[]}

err: '' expected a map, got 'string'
...