[英]Golang Cobra command flags in common function not getting values from cli
我在 function 中移動我的 cobra 命令flags
,以便我可以在其他命令中使用它。 我可以看到命令,但是當我輸入 flage 時,它總是返回false
。
以下是我的代碼:
func NewCommand(ctx context.Context) *cobra.Command {
var opts ListOptions
cmd := &cobra.Command{
Use: "list",
Short: "List",
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println(args) // []
opts.refs = args
return List(ctx, gh, opts, os.Stdout)
},
}
cmd = GetCommandFlags(cmd, opts)
return cmd
}
// GetListCommandFlags for list
func GetCommandFlags(cmd *cobra.Command, opts ListOptions) *cobra.Command {
flags := cmd.Flags()
flags.BoolVar(&opts.IgnoreLatest, "ignore-latest", false, "Do not display latest")
flags.BoolVar(&opts.IgnoreOld, "ignore-old", false, "Do not display old data")
return cmd
}
所以當我輸入以下命令時
data-check list --ignore-latest
--ignore-latest
的標志值應該為true
,但我在RunE
args 中得到false
作為值。 我在這里錯過了什么嗎?
GetCommandFlags
是我想在其他命令中使用它的東西,我不想重復相同的標志。
您將opts
按值傳遞給GetCommandFlags
。 您應該傳遞一個指向它的指針,因此為標志注冊的地址使用調用 function 中聲明的opts
。
func GetCommandFlags(cmd *cobra.Command, opts *ListOptions) *cobra.Command {
...
}
您應該使用func GetCommandFlags(cmd *cobra.Command, opts *ListOptions)
並像cmd = GetCommandFlags(cmd, &opts)
這樣調用 func。
您可以打印opts.IgnoreLatest
和opts.IgnoreOld
以查看更改的值。
對我來說很好。 希望它也對你有用。
func NewCommand(ctx context.Context) *cobra.Command {
var opts ListOptions
cmd := &cobra.Command{
Use: "list",
Short: "List",
RunE: func(cmd *cobra.Command, args []string) error {
// fmt.Println(args) // []
fmt.Println(opts.IgnoreLatest, ", ", opts.IgnoreOld)
opts.refs = args
return List(ctx, gh, opts, os.Stdout)
},
}
cmd = GetCommandFlags(cmd, &opts)
return cmd
}
// GetListCommandFlags for list
func GetCommandFlags(cmd *cobra.Command, opts *ListOptions) *cobra.Command {
flags := cmd.Flags()
flags.BoolVar(&opts.IgnoreLatest, "ignore-latest", false, "Do not display latest")
flags.BoolVar(&opts.IgnoreOld, "ignore-old", false, "Do not display old data")
return cmd
}
您正在傳遞值參數而不是指針參數。
嘗試類似:
cmd = GetCommandFlags(cmd, &opts, "")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.