You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:04:50