首頁  >  文章  >  後端開發  >  Golang Cobra 多個標誌沒有值

Golang Cobra 多個標誌沒有值

WBOY
WBOY轉載
2024-02-05 23:00:14558瀏覽

Golang Cobra 多个标志没有值

問題內容

我是 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 多個標誌沒有值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除