【问题标题】:Named Positional Arguments in CobraCobra 中的命名位置参数
【发布时间】:2021-09-14 14:56:54
【问题描述】:

我有以下Cobra 子命令:

package stripeCommands

import (
    "fmt"
    "cmd/cliConstants"
    "github.com/spf13/cobra"
    "log"
)

var (
    deleteCustomerCommand = &cobra.Command{
        Use:        "delete",
        Short:      "Delete Stripe customer(s) by ids.",
        Args:       cobra.MinimumNArgs(1),
        ArgAliases: []string{"stripe_customer_id"},
        PreRun: func(cmd *cobra.Command, args []string) {

        },
        Run: func(cmd *cobra.Command, args []string) {
            log.Printf("IDs: %v", args)
        },
    }
)

func init() {
    flags := deleteCustomerCommand.Flags()

    // -k|--stripe-api-key|STRIPE_API_KEY
    flags.StringP(cliConstants.CLIFlagStripeAPIKey, "k", "",
        fmt.Sprintf("The Stripe API key. [env: %s]", cliConstants.EnvVarStripeAPIKey))
}

我们的想法是通过./my-app stripe customers delete -k $STRIPE_API_KEY $CUSTOMER_ID_1 $CUSTOMER_ID_2 调用它。

虽然cobra.MinimumNArgs(1) 确实确保我得到至少一个位置参数,但我无法找到一种方法让它出现在帮助文档中:

Error: requires at least 1 arg(s), only received 0
Usage:
  my-app stripe customers delete [flags]

Flags:
  -h, --help                    help for delete
  -k, --stripe-api-key string   The Stripe API key. [env: stripe_api_key]

2021/09/13 12:00:39 Failed to execute command: requires at least 1 arg(s), only received 0

有没有办法告诉 Cobra 在帮助中显示位置参数,例如:

Usage:
  my-app stripe customers delete [flags] customer_id [...customer_id]

目前,帮助文档在向用户显示他们应该作为位置参数传递的内容方面并不是很有帮助。

【问题讨论】:

  • 这个你可以考虑cmd.Example

标签: go cobra


【解决方案1】:

将您的命令的Use 字段设置为:

    deleteCustomerCommand = &cobra.Command{
        Use: "delete [flags] customer_id [...customer_id]",
        ...

如何使用它的完整细节可以在cmd.UseLine()的代码中找到:
https://github.com/spf13/cobra/blob/v1.2.1/command.go#L1245

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 2012-09-17
    • 2012-04-29
    • 2021-05-14
    相关资源
    最近更新 更多