我正在嘗試創建一個 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”或類似的東西進行比較。
uj5u.com熱心網友回復:
似乎最好的選擇是為此使用子命令而不是標志。
uj5u.com熱心網友回復:
您可以通過咨詢此鏈接來解決此問題。
簡而言之,您需要的是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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/522797.html
標籤:去眼镜蛇
