为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
喵喵时光机 2023-03-07 14:09:44
我正在尝试创建一个 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”或类似的东西进行比较。
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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



查看完整回答
反对 回复 2023-03-07
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可以通过查阅此链接来解决此问题。

简而言之,您需要的是Flags()功能。您可以在此处找到文档。

package main


import (

    "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]


查看完整回答
反对 回复 2023-03-07
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信