Cobra Go CLI 库忽略标志



这是my-tool/cmd/root.go的片段

func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
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/.my-tool.yaml)")
// 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")
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
if cfgFile != "" {
fmt.Println("Config file set")
// Use config file from the flag.
viper.SetConfigFile(cfgFile)
} else {
fmt.Println("Config file NOT set")
// Find home directory.
home, err := homedir.Dir()
if err != nil {
fmt.Println(err)
os.Exit(1)
}

代码是从 cli 的脚手架过程中生成的cobra即通过~/go/cobra/init my-tool --pkg-name github.com/something/my-tool

我正在尝试暂时传递config标志以检查程序是否正在处理它:

▶ go run main.go  --config "test"  

但是,尽管我希望init()函数调用cobra.OnInitialize(initConfig)并解析该标志,如行所示:

rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.my-tool.yaml)")

最后在if语句中看到以下两条消息之一:

func initConfig() {
if cfgFile != "" {
fmt.Println("Config file set")
// Use config file from the flag.
viper.SetConfigFile(cfgFile)
} else {
fmt.Println("Config file NOT set")
// Find home directory.
home, err := homedir.Dir()
if err != nil {
fmt.Println(err)
os.Exit(1)
}

相反,我得到的只是根命令的help消息;为什么会这样?

编辑:从我通过添加一些打印语句看到的内容来看,initConfig()永远不会被调用(出于某种原因(,即好像cobra.OnInitialize(initConfig)什么都不做。

您需要先指定您的命令

▶ go run main.go "yourcommand" --config "test">

看:

» go run main.go --config "blah"
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
...
» go run main.go preview --config "blah"
Error:  open : no such file or directory
exit status 1

相关内容

  • 没有找到相关文章

最新更新