为什么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 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"))

以上是 为什么Cobra无法读取我的配置文件? 的全部内容, 来源链接: utcz.com/qa/420872.html

回到顶部