How to create flag with or without argument in golang using cobra

huangapple go评论71阅读模式
英文:

How to create flag with or without argument in golang using cobra

问题

由于我是一个语言模型,我无法直接运行代码或提供实际的翻译功能。但是,我可以帮助你理解并解决你的问题。

根据你提供的信息,你想使用cobra包创建一个flag。你已经成功创建了一个flag,并且在某些条件下它能正常工作。但是,当你使用cmd -flag这样的命令时,会出现错误信息"flag needs an argument: 'f' in -f"。

针对这种情况,你想知道如何处理,以使所有三种条件都能正常工作。

根据你提供的代码片段,你使用了StringVarP函数来创建一个flag。在这个函数中,第一个参数是一个指向flag变量的指针,第二个参数是flag的名称,第三个参数是flag的简写名称,第四个参数是flag的默认值,最后一个参数是flag的描述。

根据你的描述,你想要实现三种条件下的flag工作。为了实现这一点,你可以考虑使用StringVar函数而不是StringVarP函数。StringVar函数只接受两个参数,分别是flag变量的指针和flag的名称。这样,你就可以在命令行中使用cmd -flag value的形式来传递flag的值。

下面是修改后的代码示例:

cmd.Flags().StringVar(&flag, "flag", "", "print names")

这样修改后,你就可以通过以下三种方式来使用flag:

cmd -f "value"
cmd --flag "value"
cmd

希望这可以帮助到你!如果你有任何其他问题,请随时提问。

英文:

As I'm new to golang I want to create flag using cobra package :
Currently my flag is working for below condition :

cmd.Flags().StringVarP(&flag, "flag", "f", "", "print names")
cmd -f "value"
cmd

but if I'm using

cmd -flag 

then it is showing below error
flag needs an argument: 'f' in -f

In this case how to handle the situation as I want to all 3 conditions to work?

答案1

得分: 2

我使用Cobra为您的场景创建了一个示例程序,通过设置标志的无选项默认值。请参考此链接

或者您也可以参考此链接以获取其他场景的信息。

package main

import (
	"fmt"

	"github.com/spf13/cobra"
)

func main() {

	var rootCmd = &cobra.Command{}
	var flag string
	rootCmd.Flags().StringVarP(&flag, "flag", "f", "yep", "times to echo the input")
	rootCmd.Flags().Lookup("flag").NoOptDefVal = "user" //使用这一行
	//rootCmd.Execute()
	err := rootCmd.Execute()
	if err != nil {
		fmt.Println("Error :", err)
	}
	fmt.Println("Output :", flag)
}

输出:

D:\cobra>go run main.go rootCmd --flag
Output : user

D:\cobra>go run main.go rootCmd --flag=ms
Output : ms

D:\cobra>go run main.go rootCmd
Output : yep
英文:

I created a sample program for your scenario by setting no option default values for flags using Cobra.
Please refer this link

OR

You can also refer this link for other scenarios

package main

import (
	"fmt"

	"github.com/spf13/cobra"
)

func main() {

	var rootCmd = &cobra.Command{}
	var flag string
	rootCmd.Flags().StringVarP(&flag, "flag", "f", "yep", "times to echo the input")
	rootCmd.Flags().Lookup("flag").NoOptDefVal = "user"  //use this line
	//rootCmd.Execute()
	err := rootCmd.Execute()
	if err != nil {
		fmt.Println("Error :", err)
	}
	fmt.Println("Output :", flag)
}

Output:

D:\cobra>go run main.go rootCmd --flag
Output : user

D:\cobra>go run main.go rootCmd --flag=ms
Output : ms

D:\cobra>go run main.go rootCmd          
Output : yep

huangapple
  • 本文由 发表于 2021年12月1日 18:48:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/70182858.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定