Есть ли способ передать вложенный фрагмент произвольной структуры через переменные окружения?Приведенный ниже код прекрасно работает с файлом конфигурации 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'