【发布时间】:2022-05-01 09:54:00
【问题描述】:
这个问题与
go test flag: flag provided but not defined
类似,但由于该问题不包含最小示例且答案相当高级,所以我再问一次。在带有
main.go
和
main_test.go
的 Go 模块中,
.
├── go.mod
├── go.sum
├── main.go
└── main_test.go
main.go
定义了一个
sayHi
标志:
package main
import (
"flag"
"fmt"
)
var sayHi bool
func init() {
flag.BoolVar(&sayHi, "sayHi", false, "Say hi or not")
flag.Parse()
}
func main() {
if sayHi {
fmt.Println("Hi!")
}
}
而
main_test.go
只是一个占位符测试:
package main
import "testing"
func TestSayHi(t *testing.T) {
}
问题是,如果我尝试运行测试,我会收到“已提供标志但未定义”错误:
> go test ./...
flag provided but not defined: -test.testlogfile
Usage of /var/folders/tp/s7nwwdws1wj0z8s0vftppnnc0000gn/T/go-build952058535/b001/my-module.test:
-sayHi
Say hi or not
FAIL github.com/kurtpeek/my-module 0.192s
FAIL
从上述问题的答案来看,
您必须确保在调用
flag.Parse()
之前发生所有标志定义,通常通过在init()
函数中定义所有标志。
我不明白这里没有这样做吗?
-
你为什么解析
init()
而不是main()
?