我定义了一个自定义标志,用于接受字符串片段:

type strSliceFlag []string

func (i *strSliceFlag) String() string {
    return fmt.Sprint(*i)
}

func (i *strSliceFlag) Set(value string) error {
    *i = append(*i, value)
    return nil
}

然后用

    ...
    var tags strSliceFlag
    flag.Var(&tags, "t", tFlagExpl)
    flag.Parse()
    ...

当我构建这个程序,并在帮助标志为main -h的情况下运行它时,它会打印出:

Usage of main:
  -t value
        Test explanation

我的问题是,value这个词来自哪里?我找不到如何移除它.我认为这可能与国旗的默认值有关.

推荐答案

valueflag.UnquoteUsage为自定义类型 Select 的默认参数名(通过flag.(*FlagSet).PrintDefaults呈现).

您可以在用法文本中使用反引号覆盖默认值.反引号从用法文本中删除.如:

package main

import (
    "flag"
    "fmt"
)

type stringSlice []string

func (s *stringSlice) String() string {
    return fmt.Sprint(*s)
}

func (s *stringSlice) Set(v string) error {
    *s = append(*s, v)
    return nil
}

func main() {
    var s stringSlice
    flag.Var(&s, "foo", "append a foo to the list")
    flag.Var(&s, "foo2", "append a `foo` to the list")
    flag.Parse()
}

使用-h运行将显示参数名称如何更改:

Usage of ./flagusage:
  -foo value
        append a foo to the list
  -foo2 foo
        append a foo to the list

Go相关问答推荐

验证访问令牌(密钥罩)

Golang String

我怎样才能改进这个嵌套逻辑以使其正常工作并提高性能

如何使用 AWS sdk 在 Go 中正确解组 PartiQL 查询的结果?

为什么 mux.Vars() 返回空的 map[]

将 struct 转换为 CSV 字符串

errors.Wrap 和 errors.WithMessage 有什么区别

没有任务角色的 AWS CDK ECS 任务定义

Go gmail api 快速入门导致本地主机拒绝连接 ERR_CONNECTION_REFUSED

从动态输入中提取字符串,其中部分字符串可能不存在

如何在 golang revel 中获取动态应用程序配置

如何在golang中按字符a对字符串数组进行排序

NaN 是 golang 中的可比类型吗?

使用 package`regexp` 查找 Golang 中的所有 mactch 子字符串,但得到意外结果

使用go doc命令查看示例函数?

在 GORM 中,如何在特定时区配置 autoCreateTime 和 autoUpdateTime?

GoReleaser 和 ssh-agent Github 操作:为什么无法读取用户名...终端提示已禁用?

如何在 Go 中使用 Pact 返回错误请求(400、500)?

Dynamodb.ScanInput - 不能使用expr.Names()(类型 map[string]*string)作为类型 map[string]string

如何动态解析 Go Fiber 中的请求正文?