为什么Cobra无法读取我的配置文件?
Cobra和Viper中的文档使我感到困惑。我做了cobra init fooproject
,然后在项目目录中做了cobra add
bar。我有一个PersistentFlag
名为foo
,这里是root
命令中的init函数。
func Execute() { if err := RootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(-1)
}
fmt.Println(cfgFile)
fmt.Println("fooString is: ", fooString)
}
func init() {
cobra.OnInitialize(initConfig)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags, which, if defined here,
// will be global for your application.
RootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.fooproject.yaml)")
RootCmd.PersistentFlags().StringVar(&fooString, "foo", "", "loaded from config")
viper.BindPFlag("foo", RootCmd.PersistentFlags().Lookup("foo"))
// Cobra also supports local flags, which will only run
// when this action is called directly.
RootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
我的配置文件如下所示:
---foo: aFooString
当我打电话给go run main.go
我的时候
A longer description that spans multiple lines and likely containsexamples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.
Usage:
fooproject [command]
Available Commands:
bar A brief description of your command
help Help about any command
Flags:
--config string config file (default is $HOME/.fooproject.yaml)
--foo string loaded from config
-h, --help help for fooproject
-t, --toggle Help message for toggle
Use "fooproject [command] --help" for more information about a command.
fooString is:
当我打电话时go run main.go bar
看到了…
Using config file: my/gopath/github.com/user/fooproject/.fooproject.yamlbar called
fooString is:
因此它正在使用配置文件,但是似乎没有人正在读取它。也许我误解了眼镜蛇和毒蛇的工作方式。有任何想法吗?
回答:
要结合spf13/cobra
和spf13/viper
,首先使用Cobra定义标志:
RootCmd.PersistentFlags().StringP("foo", "", "loaded from config")
与Viper绑定:
viper.BindPFlag("foo", RootCmd.PersistentFlags().Lookup("foo"))
并通过Viper方法获取变量:
fmt.Println("fooString is: ", viper.GetString("foo"))
以上是 为什么Cobra无法读取我的配置文件? 的全部内容, 来源链接: utcz.com/qa/420872.html