我正在使用cobra创建一个CLI应用程序(app).我需要实现一个行为,其中I can pass flags as arguments.这些标志将通过exec.Command()传递|进一步用于另一个应用程序.app本身必须忽略传递给app的所有标志参数,即不能识别为标志.

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

与应用程序交互的示例:

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

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

推荐答案

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

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

Go相关问答推荐

gorm如何声明未自动更新的unix时间戳米尔斯字段

在保留额外参数的同时解封YAML

理解Golang并发:缓冲通道的意外行为

GitHub发布Golang子模块

编辑时保留YAML文件中的单引号

使用Digitorus/pdfsign在GO(Golang)中签署pdf文件

为什么 Go 对于长度为 100k 的切片使用的内存比长度为 100k 的数组要少?

调用库和直接操作效率有区别吗?

Go time.Parse 无效的 ISO 日期

杜松子wine 和中间件

有没有办法在 Golang 中使用带有 go-simple-mail lib 的代理?

在密钥不存在时处理 PATCH 部分更新

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

grpc-gateway:重定向与定义不匹配(原始文件)

具有两个或多个模型的 GORM 查询

使用innerxml在 Go 中编码 XML 是否仅适用于某些类型?

Golang计算 struct struct 中的字段数

出于某种原因,Golang (Go) AES CBC 密文被填充了 16 个 0x00 字节

测试包外文件时的 Golang 测试覆盖率

在 Go 泛型中,如何对联合约束中的类型使用通用方法?