首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cobra go cli库忽略标志

cobra go cli库忽略标志
EN

Stack Overflow用户
提问于 2019-12-05 15:39:39
回答 1查看 613关注 0票数 0

下面是my-tool/cmd/root.go的一个片段

代码语言:javascript
复制
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)
        }

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

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

代码语言:javascript
复制
▶ go run main.go  --config "test"  

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

代码语言:javascript
复制
    rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.my-tool.yaml)")

最后,在if语句中看到这两条消息中的一条:

代码语言:javascript
复制
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)什么都不做。

EN

回答 1

Stack Overflow用户

发布于 2019-12-05 15:46:51

您需要首先指定命令。

运行main.go "yourcommand“--配置”▶“

请参见:

代码语言:javascript
复制
» 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59198574

复制
相关文章

相似问题

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