Go测试文件必须以_test.go结尾且与被测代码同包;测试函数须为func TestXxx(testing.T)签名;go test支持多种运行方式;testing.T非并发安全,需谨慎使用。
_test.go 结尾Go 的 go test 命令只会自动识别和运行后缀为 _test.go 的文件。如果命名为 utils_test.go,它会被识别;但写成 test_utils.go 或 utils_test.go.bak 就完全不会执行。
unexportedFunc()
import 引入目标包,只测导出项func TestXxx(*testing.T) 是唯一被识别的测试函数签名Go 不支持自定义测试函数名或参数类型。只有形如 func TestSomething(t *testing.T) 的函数才会被 go test 扫描到。常见错误包括:
func testSomething(t *testing.T)(首字母小写 → 忽略)*testing.T 参数,或改成 *testing.B(那是基准测试,不是单元测试)func TestXxx(t *testing.T, ctx context.Context)(编译通过但不被识别)func TestAdd(t *testing.T) {
got := Add(2, 3)
want := 5
if got != want {
t.Errorf("Add(2,3) = %d, want %d", got, want)
}
}go test 运行时要注意工作目录和包路径在模块根目录下执行 go test 默认跑当前包;加 -v 可看详细输出,加 -run 可匹配测试函数名。
go test:仅运行当前目录下的 *_test.go
go te
st ./...:递归运行所有子目录中的测试(推荐 CI 场景)go test -run=^TestAdd$:精确匹配函数名(^ 和 $ 是正则锚点)go.mod 存在且 GO111MODULE=on(默认已启用)testing.T 的并发安全限制*testing.T 对象不是并发安全的——不能在 goroutine 中直接调用 t.Log 或 t.Error,否则可能 panic 或输出错乱。
t.Parallel() 标记测试可并行执行,但前提是测试间无共享状态t.Fatal/t.Fatalf 会终止当前测试函数,但不影响其他测试;而 os.Exit(1) 会直接退出整个 go test 进程,禁止使用func TestConcurrentAdd(t *testing.T) {
t.Parallel() // 允许与其他 Parallel 测试并发运行
results := make(chan int, 10)
for i := 0; i < 10; i++ {
go func() {
results <- Add(1, 1)
}()
}
for i := 0; i < 10; i++ {
if got := <-results; got != 2 {
t.Errorf("expected 2, got %d", got) // 在主 goroutine 中调用
}
}
}真正容易被忽略的是:测试文件里 import 的包,只要没被任何测试函数实际引用,Go 编译器会静默忽略——这意味着 _test.go 中写了 import "net/http" 却没用,不会报错,但后续加了 http 相关逻辑却忘记补 import,就会编译失败。检查方式很简单:go test -v -x 看实际执行的编译命令,或用 go list -f '{{.Imports}}' xxx_test.go 确认依赖是否完整。
# go
# golang
# golang测试
# Error
# 递归
# 并发
# 对象
# http
# 的是
# 就会
# 那是
# 才会
# 能在
# 要把
# 只会
# 自动识别
# 很简单
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
PythonDocker高级项目部署教程_多容器管理与CI/CD流水线
mac怎么退出id_MAC退出iCloud账号与Apple ID切换【指南】
Win10如何备份驱动程序_Win10驱动备份步骤【攻略】
Python与Docker容器化部署实战_镜像构建与CI/CD流程
c++ namespace命名空间用法_c++避免命名冲突
VSC怎样在VSC中调试PHPAPI_接口调试技巧【详解】
Python深度学习实战教程_神经网络模型构建与训练
php错误怎么开启_display_errors与log_errors的设置【汇总】
如何在Golang中处理通道发送接收错误_防止阻塞或panic
Python正则表达式实战_模式匹配说明【教程】
Python与OpenAI接口集成实战_生成式AI应用场景解析
C#如何使用XPathNavigator高效查询XML
Win11怎么更改电脑密码_Windows 11修改本地账户密码【步骤】
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
php怎么下载安装并配置环境变量_命令行调用PHP技巧【技巧】
Python脚本参数接收_sys与argparse解析【指导】
Linux如何安装JDK11_Linux环境变量配置与Java开发环境搭建【教程】
Linux怎么禁止Root用户远程登录_Linux系统SSH加固与安全设置【教程】
Go语言中slice追加操作的底层共享机制详解
Windows怎样关闭开始菜单广告_Windows关闭开始菜单广告设置【步骤】
php做exe支持多线程吗_并发处理实现方式【详解】
Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】
如何在Golang中实现服务熔断与限流_Golang微服务容错与流控方法
Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】
Win11怎么设置屏保_Windows 11屏幕保护程序开启与设置【详解】
mac怎么打开终端_MAC终端Terminal使用入门与常用命令【教程】
如何使用Golang实现云原生应用弹性伸缩_自动应对流量变化
Windows执行文件被SmartScreen拦截原因_安全提示与绕过方式
如何用列表一次性对 DataFrame 的指定列应用字典映射
Win11右键反应慢怎么办 Win11优化右键菜单加载速度【技巧】
Win11怎么压缩文件 Win11自带压缩解压功能使用【教程】
Win11资源管理器卡顿怎么办 Win11文件资源管理器重启技巧【优化】
Windows电脑如何进入安全模式?(多种按键方法)
PHP 中 require() 语句返回值的用法详解
Mac如何修改Hosts文件?(本地开发与屏蔽网站)
如何使用Golang配置安全开发环境_防止敏感信息泄露
如何使用Golang捕获测试日志_Golang testing日志记录方法
Python多线程使用规范_线程安全解析【教程】
MAC如何启用访达侧边栏显示_MAC Finder偏好设置与常用目录添加【教程】
php嵌入式需要什么环境_搭建php+linux嵌入式开发环境【详解】
如何使用Golang匿名函数_快速定义临时函数逻辑
Win10系统字体模糊怎么办_Windows10高级缩放设置修复
Go 语言标准库为何不提供泛型 Contains 方法?
Win11怎么查看电脑配置_Win11硬件配置详细查询方法【详解】
Win11怎么卸载Photos应用_Win11卸载Photos应用方法【教程】
Win11怎么关闭触摸屏_禁用Win11笔记本触摸屏功能设置【教程】
Python 模块的 __name__ 属性如何由导入方式决定?
php打包exe如何加密代码_防反编译保护方法【技巧】
C#如何序列化对象为XML XmlSerializer用法
如何用正则与预处理结合精准拦截拼接式垃圾域名
2026-01-02
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。