为了账号安全,请及时绑定邮箱和手机立即绑定

无法从 env 获取嵌套密钥以使用 viper 覆盖 yaml 配置文件

无法从 env 获取嵌套密钥以使用 viper 覆盖 yaml 配置文件

Go
慕少森 2022-12-19 11:47:30
这是我的简化配置: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 不允许在环境变量名称中使用点,因此我们必须将其替换为下划线。


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信