我是 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_firmware
和 reboot
。
作為重新啟動充電器的範例,您將執行命令:
$ charger reboot
在上面的程式碼中,您嘗試將子命令定義為標誌,這是可能的,但可能不是一個好的做法。
相反,該項目應該設定如下: https:// github.com/hesamchobanlou/stackoverflow/tree/main/74934087
然後,您可以在 cmd/update_firmware.go 下的相應命令定義中移動 updatefirmware(...)
操作,而不是嘗試檢查根 chargercmd 上的每個標誌變體。
如果這沒有幫助,請提供更多詳細信息,說明為什麼您認為您的方法可能不正確?
以上是Golang Cobra 多個標誌沒有值的詳細內容。更多資訊請關注PHP中文網其他相關文章!