如何在眼镜蛇(golang)中将标志作为参数传递?

How to pass flags as arguments in cobra (golang)?

我正在使用 cobra to create a CLI application (app). I need to implement a behavior in which I can pass flags as arguments. These flags will be passed|used further to another application via exec.Command()。传递给 app 的所有标志参数必须被 app 本身忽略,即不被识别为标志。

我不排除这是一种奇怪的行为。但如果有机会实施,我将不胜感激。

与应用程序交互的示例:

> app --help
or
> app --first --second

我希望参数(--help --first --second 和所有其他参数)不被视为 app[=24 的标志=].

您可以在双破折号 -- 之后传递它们,按照惯例,这表示后面的标志和参数不应被解释为主程序的参数和标志。除非您以某种方式明确使用它们,否则它们将被忽略。即:

if len(pflag.Args()) != 0 {
    afterDash := pflag.Args()[pflag.CommandLine.ArgsLenAtDash():]
    fmt.Printf("args after dash: %v\n", afterDash)
}
$ go run ./cmd/tpl/ -d yaml -- --foo --bar
args after dash: [--foo --bar]

cobra 正在使用 pflag 包 https://pkg.go.dev/github.com/spf13/pflag