Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cobra go cli库忽略标志_Go_Go Cobra - Fatal编程技术网

cobra go cli库忽略标志

cobra go cli库忽略标志,go,go-cobra,Go,Go Cobra,这是我的工具/cmd/root.go中的一段代码 func执行(){ 如果错误:=rootCmd.Execute();错误!=nil{ fmt.Println(错误) 操作系统退出(1) } } func init(){ cobra.OnInitialize(initConfig) //在这里,您将定义您的标志和配置设置。 //Cobra支持持久性标志,如果在此处定义, //将是您的应用程序的全局。 rootCmd.PersistentFlags().StringVar(&cfgFile,“co

这是我的工具/cmd/root.go中的一段代码

func执行(){
如果错误:=rootCmd.Execute();错误!=nil{
fmt.Println(错误)
操作系统退出(1)
}
}
func init(){
cobra.OnInitialize(initConfig)
//在这里,您将定义您的标志和配置设置。
//Cobra支持持久性标志,如果在此处定义,
//将是您的应用程序的全局。
rootCmd.PersistentFlags().StringVar(&cfgFile,“config”、“”和“config文件(默认值为$HOME/.my tool.yaml)”)
//Cobra还支持仅运行的本地标志
//当直接调用此操作时。
rootCmd.Flags().BoolP(“切换”,“t”,false,“切换的帮助消息”)
}
//initConfig读取配置文件和环境变量(如果设置)。
func initConfig(){
如果cfgFile!“”{
fmt.Println(“配置文件集”)
//使用标志中的配置文件。
viper.SetConfigFile(cfgFile)
}否则{
fmt.Println(“未设置配置文件”)
//查找主目录。
home,err:=homedir.Dir()
如果错误!=零{
fmt.Println(错误)
操作系统退出(1)
}
代码是从
cobra
cli的搭建过程生成的,即通过
~/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()
最后,要在
if
语句中查看这两条消息中的一条:

func initConfig(){
如果cfgFile!“”{
fmt.Println(“配置文件集”)
//使用标志中的配置文件。
viper.SetConfigFile(cfgFile)
}否则{
fmt.Println(“未设置配置文件”)
//查找主目录。
home,err:=homedir.Dir()
如果错误!=零{
fmt.Println(错误)
操作系统退出(1)
}
相反,我得到的只是root命令的
help
消息;这是为什么


edit:我通过添加一些打印语句看到,
initConfig()
从未被调用(出于某种原因),即好像
cobra.OnInitialize(initConfig)
不做任何事情。

您需要首先指定您的命令

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

见:


您需要首先指定您的命令

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

见:


由于我在
root.go
中添加此标志,因此不应将其解析为根级别标志(即,当我解析它时?),它将在根级别上解析,但我确实认为cobra需要一个“命令”作为其语法的一部分。例如,配置文件在运行时是全局的,因为我在
root.go
中添加了这个标志,所以不应该被解析为根级别的标志(即,当我解析它时?),它会在根级别上被解析,但我确实认为cobra需要一个“命令”作为其语法的一部分。例如,配置文件在运行时是全局的
» 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