使用FLAG包,有没有好的方法来区分是否传递了字符串标志?

例如,当标志未传递时,我希望将其设置为动态默认值.但是,如果提供了标志但值为"",我想将其设置为空.

目前,我正在做以下工作:

flagHost = flag.String(flagHostFlagKey, "", "...")
...
setHostname := false
for _, arg := range os.Args {
    if arg == "-"+flagHostFlagKey {
        setHostname = true
    }
}

if !setHostname {
     ...

这看起来不错,但有点难看.在使用标准旗帜套餐的同时,有没有更好的办法?

推荐答案

使用flag.Visit()功能:

func isFlagPassed(name string) bool {
    found := false
    flag.Visit(func(f *flag.Flag) {
        if f.Name == name {
            found = true
        }
    })
    return found
}

Go相关问答推荐

Pulumi-S3-当策略依赖于访问点时,如何将AccesspintPolicy附加到访问点

切换选项卡时,Goland IDE中的光标自动转移

由docker中的nginx提供的样式和图像在页面上不起作用

exec的可执行决议.命令+路径

如果第一次匹配条件,如何跳过切片中的值

我们如何保证取消的上下文会导致 goroutine 终止?

使用 LINQ 对内部数组进行排序

如何将 base64 编码的公钥转换为 crypto.PublicKey 或 ecdsa.PublicKey

emersion/go-imap - imap.FetchRFC822:无效内存地址或零指针取消引用

如何使用带有方法的字符串枚举作为通用参数?

Dockerfile 问题 - 为什么找不到二进制 dlv - 没有这样的文件或目录

try 运行 docker-compose up -d 时出现错误

如果服务器在客户端的 gRPC 中不可用,则等待的方法

什么是无效字符实体 &ccb

具有多个嵌入式 struct 的 Go MarshalJSON 行为

Golang 泛型

在 Go 中,为什么 exec.Command() 失败但 os.StartProcess() 成功启动winget.exe?

无法识别同步错误.使用一次

Golang 'defer' 导致发送(接收)API 响应延迟

如何使用 fyne 避免 GUI 应用程序中的循环依赖?