簡體   English   中英

常見的 Golang Cobra 命令標志 function 未從 cli 獲取值

[英]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.IgnoreLatestopts.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM