当前位置: 首页 > 面试题库 >

为什么Cobra无法读取我的配置文件?

钱嘉致
2023-03-14
问题内容

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 contains
examples 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.yaml
bar called

fooString is:

因此它正在使用配置文件,但是似乎没有人正在读取它。也许我误解了眼镜蛇和毒蛇的工作方式。有任何想法吗?


问题答案:

要结合spf13/cobraspf13/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"))


 类似资料:
  • 我有一个常春藤和人工制品设置要发布,并依赖于构建。 在Artifactory中,我有一个Ivy文件,大致如下: 当我在另一个项目中依赖这个模块时,我指定了编译配置,但IvyDE告诉我编译不存在。 在这个设置中,我得到了错误消息 “在组织#模块中找不到配置;0.277-快照:'编译'” 如果依赖conf更新为编译,我确实会得到jar- 有什么建议吗?

  • 输入是一个名为Wiki micro的文本文件。txt。。。字数计算程序运行正常。。我需要的是修改它 }

  • 问题内容: 我有一个问题,当XML文件中存在UTF-8字符时,我的DOM解析器无法加载文件现在,我知道我必须给他指令以读取utf-8,但我不知道如何放置它在我的代码中,它是: 我知道有方法setencoding(),但我不知道将其放在代码中的位置… 问题答案: 试试这个。 为我工作

  • 问题内容: 我将代码简化为我可以做的最简单的express-js应用程序: 我的目录如下所示: 但是,当我访问时,出现以下错误: 我正在使用和。我究竟做错了什么? 问题答案: 尝试。 要在您的请求URL中使用: 查看此页面上的示例:

  • 我在玩spring boot并试图创建一个特定于配置文件的配置文件。我称之为。 我还试图使用gradle命令从终端运行:,但得到了相同的错误。只有当我将YAML文件重构为时,它才起作用。我做错了什么?我打算有3个配置文件,如本地,开发和Prod。

  • 本文向大家介绍java读取properties配置文件的方法,包括了java读取properties配置文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java读取properties配置文件的方法。分享给大家供大家参考。具体分析如下: 这两天做java项目,用到属性文件,到网上查资料,好半天也没有找到一个满意的方法能让我读取到.properties文件中属性值,很是郁闷,网上讲