登录
首页 >  Golang >  Go问答

处理Golang Cobra中无值的多个标志

来源:stackoverflow

时间:2024-02-08 13:27:22 294浏览 收藏

哈喽!今天心血来潮给大家带来了《处理Golang Cobra中无值的多个标志》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我是 golang 新手,正在使用 cobra 框架尝试我的第一个 cli 应用程序。

我的计划是使用很少的命令,使用很多标志。 这些标志不必附加值,因为它们可以简单地使用 -r 来重新启动设备。

目前,我有以下工作,但我一直在想,这不是正确的方法。 因此,我们非常感谢任何帮助。

当前的逻辑是,每个命令都会附加一个默认值,然后我在运行命令中查找该值,并在捕获它后触发我的函数。

我的“工作代码”如下所示。

我的init函数,在命令中包含以下内容。

chargercmd.flags().stringp("updatefirmware", "u", "", "updeates the firmware of the charger")
    chargercmd.flags().lookup("updatefirmware").nooptdefval = "yes"
    chargercmd.flags().stringp("reboot", "r", "", "reboots the charger")
    chargercmd.flags().lookup("reboot").nooptdefval = "yes"

运行部分如下所示。

Run: func(cmd *cobra.Command, args []string) {
        input, _ := cmd.Flags().GetString("UpdateFirmware")
        if input == "yes" {
            fmt.Println("Updating firmware")
            UpdateFirmware(os.Getenv("Test"), os.Getenv("Test2")) 
        }
        input, _ = cmd.Flags().GetString("reboot")
        if input == "yes" {
            fmt.Println("Rebooting Charger")
        }
    },

正确答案


也许为了让用法更清晰一些,正如 burak 的评论中所述 - 您可以更好地区分命令和标志。使用 cobra,您可以拥有 root 命令和附加到 root 命令的子命令。另外,每个命令都可以接受标志。

在您的情况下,charger 是根命令,您需要两个子命令:update_firmwarereboot

作为重新启动充电器的示例,您将执行命令:

$ charger reboot

在上面的代码中,您尝试将子命令定义为标志,这是可能的,但可能不是一个好的做法。

相反,该项目应该设置如下: https:// github.com/hesamchobanlou/stackoverflow/tree/main/74934087

然后,您可以在 cmd/update_firmware.go 下的相应命令定义中移动 updatefirmware(...) 操作,而不是尝试检查根 chargercmd 上的每个标志变体。

如果这没有帮助,请提供更多详细信息,说明为什么您认为您的方法可能不正确?

理论要掌握,实操不能落!以上关于《处理Golang Cobra中无值的多个标志》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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