这是我的简化配置:stripe: secret_key: sk_fromconfig为什么毒蛇不从环境中获取价值?% echo $STRIPE_SECRET_KEYsk_fromenv% go run main.go sk_fromconfig我希望它从 env 中获取价值,因为我有这样一个:% echo $STRIPE_SECRET_KEYsk_fromenv% go run main.go sk_fromenv这是代码:package mainimport ( "fmt" viper "github.com/spf13/viper")type Config struct { Stripe Stripe}type Stripe struct { SecretKey string `mapstructure:"secret_key"`}func main() { viper.SetConfigName("config") viper.SetConfigType("yaml") viper.AddConfigPath(".") viper.AutomaticEnv() _ = viper.ReadInConfig() var config Config _ = viper.Unmarshal(&config) fmt.Println(config.Stripe.SecretKey)}我试过了viper.BindEnv("STRIPE_SECRET_KEY"),viper.SetEnvPrefix("STRIPE")但没有用。
1 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
使用viper.SetEnvKeyReplacer
,因为它不会自动替换.
为_
viper.SetEnvKeyReplacer(strings.NewReplacer(`.`,`_`))
所以它正在寻找环境变量STRIPE.SECRET_KEY
,但由于大多数 shell 不允许在环境变量名称中使用点,因此我们必须将其替换为下划线。
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消