登录
首页 >  Golang >  Go问答

必须在 Cobra 命令中使用标志参数

来源:stackoverflow

时间:2024-02-21 16:48:25 454浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《必须在 Cobra 命令中使用标志参数》,聊聊,我们一起来看看吧!

问题内容

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

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

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

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


正确答案


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

您可以通过咨询 this link 来解决这个问题。

简而言之,您需要的是 flags() 函数。您可以找到文档 here

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]

以上就是《必须在 Cobra 命令中使用标志参数》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>