下面是一个非常简单的go
程序
package main
import (
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
type Config struct {
AFlag string `mapstructure:"A_FLAG"`
}
var rootCmd = &cobra.Command{
Use: "myapp",
Short: "My app",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("running")
},
}
func InitConfig(cmd *cobra.Command) {
var conf Config
v := viper.New()
v.AddConfigPath(".")
v.SetConfigName(".env")
v.SetConfigType("env")
v.SetEnvPrefix("FOO")
v.AllowEmptyEnv(true)
v.AutomaticEnv()
v.BindPFlags(cmd.Flags())
v.Unmarshal(&conf)
fmt.Printf("%+v\n", conf)
}
func main() {
rootCmd.PersistentFlags().StringP("a-flag", "", "", "a flag")
InitConfig(rootCmd)
rootCmd.Execute()
}
后
export FOO_A_FLAG=test
或者以
go run main.go --a-flag=test
程序应该正在打印
{AFlag:test}
running
但是,它似乎没有考虑env var(带前缀)和标志
{AFlag:}
running
2条答案
按热度按时间7eumitmz1#
我想你是导出错误的env变量。请尝试使用:
export A_FLAG=test
。您可以参考以下链接以获得一些参考:
https://renehernandez.io/snippets/bind-environment-variables-to-config-struct-with-viper/
7y4bm7vi2#
试试这个