go test中使用--传递自定义flag的语法是否始终有效?
go test 中--传递自定义参数的可用性确认 我测试发现通过go test -- <自定义flag>的方式,可以给测试代码传递自定义命令行参数,但在go help build、go help test和go help testflag的官方文档中,都没有检索到关于--的相关说明,想确认这个语法是否能始终保证可用。
测试代码
package main import ( "os" "testing" ) var isVerbose = false func init() { for _, flag := range os.Args { if flag == "-my-verbose" { isVerbose = true } } } func Test_1(t *testing.T) { if isVerbose { t.Log("hello") } t.Log("world") }
执行命令及输出
未传递自定义参数
$ go test . -v === RUN Test_1 main_test.go:22: world --- PASS: Test_1 (0.00s) PASS ok a 0.137s
传递自定义参数
$ go test . -v -- -my-verbose === RUN Test_1 main_test.go:20: hello main_test.go:22: world --- PASS: Test_1 (0.00s) PASS ok a 0.140s
关于可用性的说明
这个--的用法是Go工具链里传递参数给目标二进制程序的通用方式,不止go test,go run等命令也支持。它源自Unix命令行的通用惯例——用--分隔工具自身的参数和要传递给后续执行程序的参数。
虽然官方没有在test相关的帮助文档里单独说明,但这个特性已经存在多年,属于Go工具链的基础行为。从Go的版本迭代历史来看,Go团队不太会轻易移除这种符合通用惯例的特性,稳定性有保障。不过严格来说,官方没有明确给出长期兼容的承诺,如果你需要更稳妥的方式,也可以通过环境变量传递自定义配置,但--的用法在实际生产和日常开发中是广泛被认可和使用的。
内容的提问来源于stack exchange,提问作者ynn
相关产品推荐
相关产品推荐

