最近我遇到了一个关于 Golang 标志的问题,我很想知道这是否是预期的,它是否是一个问题,或者我是不是一个喋喋不休的白痴,对此有一个非常简单的答案。
所以使用下面的代码:
func main() {
test := flag.String("-test", "", "test var")
flag.Parse()
if *test != "" {
fmt.Println(*test)
}
}
然后使用以下命令运行它 ./main -test 1
您收到以下自动生成的错误:
flag provided but not defined: -test
Usage of ./main:
--test string
test var
如果你随后使用 ./main --test 1
也会发生同样的情况,你会得到同样的错误。我发现的唯一方法是将标志定义更改为 test := flag.String("test", "", "test var")
然后用 运行它./main -test 1
.
所以我的问题是为什么不能在标志中使用双连字符?如果可以的话,我这样做哪里出错了?
最佳答案
您可以使用双连字符,这在包 here 中有记录:
One or two minus signs may be used; they are equivalent.
声明您的标志后,flag.Parse()
将尝试从传递的标志中删除一两个连字符,并使用每个标志的剩余字符来检测是否已声明一个标志。这是由 parseOne()
中的标志包在内部完成的.
声明一个名为 -test
的标志将按原样映射它,导致 flag.Parse()
在内部寻找名称 test
而不是你实际声明的 -test
,导致你看到的错误。
相反,在声明一个标志时只使用标志的名称:
test := flag.String("test", "", "test var")
您可以将此标志与一个 (./main -test 1
) 或两个连字符 (./main --test 2
) 一起使用。
关于go - golang 标志问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47540876/