首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从env获得嵌套密钥以使用viper覆盖yaml配置文件

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

Stack Overflow用户
提问于 2022-05-28 10:04:32
回答 1查看 843关注 0票数 1

这是我的简化配置:

代码语言:javascript
复制
stripe:
  secret_key: sk_fromconfig

为什么毒蛇不接受env的价值?

代码语言:javascript
复制
% echo $STRIPE_SECRET_KEY
sk_fromenv
% go run main.go 
sk_fromconfig

我希望它从env中获得价值,因为我有这样的一个:

代码语言:javascript
复制
% echo $STRIPE_SECRET_KEY
sk_fromenv
% go run main.go 
sk_fromenv

以下是代码:

代码语言:javascript
复制
package main

import (
    "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"),但没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-28 12:09:58

使用viper.SetEnvKeyReplacer,因为它不会自动从.替换为_

代码语言:javascript
复制
viper.SetEnvKeyReplacer(strings.NewReplacer(`.`,`_`))

所以它在寻找环境变量STRIPE.SECRET_KEY,但是由于大多数shell不允许环境变量名中的点,所以我们必须用下划线替换它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72414729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档