这是我的简化配置:
stripe:
secret_key: sk_fromconfig为什么毒蛇不接受env的价值?
% echo $STRIPE_SECRET_KEY
sk_fromenv
% go run main.go
sk_fromconfig我希望它从env中获得价值,因为我有这样的一个:
% echo $STRIPE_SECRET_KEY
sk_fromenv
% go run main.go
sk_fromenv以下是代码:
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"),但没有成功。
发布于 2022-05-28 12:09:58
使用viper.SetEnvKeyReplacer,因为它不会自动从.替换为_
viper.SetEnvKeyReplacer(strings.NewReplacer(`.`,`_`))所以它在寻找环境变量STRIPE.SECRET_KEY,但是由于大多数shell不允许环境变量名中的点,所以我们必须用下划线替换它。
https://stackoverflow.com/questions/72414729
复制相似问题