Go项目中使用httptest包的目录测试报cgo缺失cc错误
问题结论
这个报错和你编写的Go业务代码、测试代码完全无关,是本地Go环境的cgo配置异常导致的。
报错原因
httptest包的依赖链路会触发Go runtime的cgo构建逻辑,而你当前环境的C编译器路径(CC环境变量)被错误配置为了不存在的/missing-cc,构建到cgo相关的runtime环节时就会直接失败。
其余未导入httptest的目录代码没有触发cgo构建流程,所以测试可以正常通过,这也和你新建目录测试的结果完全吻合。
解决方法
- 如果你不需要用到cgo相关能力,直接在运行测试时禁用cgo即可:
执行后就可以正常编译跑通所有测试。CGO_ENABLED=0 go test ./... - 如果你确实需要启用cgo,只需要把
CC环境变量配置为当前环境实际存在的C编译器路径即可,例如:# 先确认本地gcc的实际路径 which gcc # 再配置对应环境变量后运行测试 CC=你的gcc实际路径 go test ./racer/
额外提示:等你解决完cgo的构建问题后,还会遇到编译错误:当前
Racer函数的返回值只有获胜地址,和测试里期望的(winner, error)签名不匹配,后续可以修改函数签名,通过select增加time.After分支实现超时返回错误的逻辑。
内容的提问来源于stack exchange,提问作者gabriel_tiso
相关产品推荐
相关产品推荐

