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 】
相关推荐:
Win11鼠标灵敏度怎么调 Win11鼠标指针移动速度设置【教程】
如何使用Golang实现云原生应用弹性伸缩_自动应对流量变化
Win11怎么设置任务栏大小_Windows11注册表修改TaskbarSi值
如何在Golang中使用log包输出不同级别日志_Golang log日志管理与分类
mac怎么查看wifi密码_MAC查看已连接WiFi密码方法【技巧】
Python邮件系统自动化教程_批量发送解析与模板应用
Win10系统字体模糊怎么办_Windows10高级缩放设置修复
如何在 ACF 中正确更新嵌套多层的 Group 字段子字段
Python技术债务管理_长期维护解析【教程】
VSC里PHP变量未定义报错怎么解决_错误抑制技巧【解答】
如何在 Go 应用中实现自动错误恢复与进程重启机制
Win11怎么打开注册表_Windows 11注册表编辑器启动命令【步骤】
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何在JavaScript中动态拼接PHP的base_url与前端变量
Win11怎么关闭触控板_Win11笔记本禁用触摸板快捷键
Python高性能计算项目教程_NumPyCythonGPU并行加速
Go 语言标准库为何不提供泛型 Contains 方法:设计哲学与类型系统约束
php查询数据怎么导出csv_查询结果转csv文件保存【操作】
Windows 10自带杀毒软件在哪_Windows 10打开和使用Windows安全中心
如何在Golang中处理通道发送接收错误_防止阻塞或panic
Win10如何设置双wan路由器 Win10双wan路由器设置方法【指南】
Python多进程教程_multiprocessing模块实战
Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录
Windows10系统怎么查看CPU核心数_Win10逻辑处理器数量查看
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
Win11如何设置系统语言_Win11系统语言切换教程【攻略】
Linux如何挂载新硬盘_Linux磁盘分区格式化与开机自动挂载【指南】
WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程
Windows10系统怎么查看防火墙状态_Win10安全中心网络保护
Golang如何测试HTTP中间件_Golang HTTP中间件功能测试实践
Win10如何更改电脑休眠时间_Windows10电源和睡眠选项调整
如何在Golang中处理云原生事件_使用Event和Notification机制
Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选
php本地部署后session无法保存_session存储路径与权限设置技巧【技巧】
Python生成器表达式内存优化_惰性计算说明【指导】
如何提升Golang JSON序列化性能_Golang JSON编码效率优化方法
php485读数据时阻塞怎么办_php485非阻塞读取设置技巧【详解】
Python字符串处理进阶_切片方法解析【指导】
php中$this和::能混用吗_对象与静态作用域冲突解决【方法】
PHP主流架构怎么处理表单验证_规则与自定义【技巧】
Python函数接口文档化_自动化说明【指导】
Win11怎么设置默认PDF阅读器 Win11修改PDF打开方式【步骤】
win11如何清理传递优化文件 Win11为C盘瘦身删除更新缓存【技巧】
Python与GPU加速技术_CUDA与Numba高性能计算实践
Win10电脑怎么设置IP地址_Windows10网络属性固定IP配置
php高频调试功能有哪些_php常用调试函数与工具汇总【解答】
PyTorch DDP 多进程训练在 Kaggle 笔记本中的正确启动方式
如何使用正则表达式提取以编号开头、后跟多个注解的完整代码块
mac怎么分屏_MAC双屏显示与分屏操作技巧【指南】
Python配置文件操作教程_JSONINIYAML解析与应用实战
2026-01-02
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。