猿问

要求标志作为 Cobra 命令中的第一个参数

我正在尝试创建一个 Cobra 命令,它使用一个标志来通知命令的操作,特别是一个可以添加或删除配置设置的配置命令。例如

cli> prog_name config --set config_var var_vlue
cli> prog_name config --unset config_var var_value

有没有办法在眼镜蛇中做到这一点?我一直在阅读文档,但没有找到任何方法来验证标志是命令中的第一个值。我看过有关位置参数的信息,但从我读到的内容来看,标志似乎不被视为参数,因此位置参数不会涵盖它们。

我想我可以在我的 PreRunE 函数中执行此操作并手动进行验证,但如果有一种方法可以在 Cobra 中进行设置,我认为这很可能会更好,因为我更喜欢 Cobra 进行解析和匹配而不是我必须将 os.Args 中的特定值与“--set”和“--unset”或类似的东西进行比较。


喵喵时光机
浏览 79回答 2
2回答

慕桂英546537

似乎最好的选择是为此使用子命令而不是标志。

慕桂英4014372

您可以通过查阅此链接来解决此问题。简而言之,您需要的是Flags()功能。您可以在此处找到文档。package mainimport (    "fmt"    "github.com/spf13/cobra")var rootCmd = &cobra.Command{    Use: "testprog",    Run: func(cmd *cobra.Command, args []string) {        fmt.Println("rootCmd called")    },}var subCmd = &cobra.Command{    Use: "sub",    Run: func(cmd *cobra.Command, args []string) {        fmt.Println(args)    },}func main() {    rootCmd.AddCommand(subCmd)        flags := subCmd.Flags()    // not necessary in your case    flags.SetInterspersed(false)    // Bool defines a bool flag with specified name,    // default value, and usage string. The return value    // is the address of a bool variable that stores    // the value of the flag.    flags.Bool("test", false, "test flag")    rootCmd.Execute()}让我们看看终端中发生了什么:    > ./cobraApp sub --test a    > [a]
随时随地看视频慕课网APP

相关分类

Go
我要回答