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

为何在Go模块外执行go test无效?如何在仓库根目录运行测试?

解决方法

方法1:指定go.mod文件路径

在仓库根目录执行go test时,通过-modfile参数明确指定mysrc目录下的go.mod文件路径:

go test -modfile=./mysrc/go.mod ./mysrc/a

这个参数会告诉Go命令使用指定的模块文件,从而正确识别mysrc/a包所属的模块。

方法2:使用-C参数切换工作目录

Go 1.14及以上版本支持-C参数,让命令在指定目录执行,但仍保持当前终端的工作目录不变,刚好适配你的nvim-dap需求:

go test -C ./mysrc a

这条命令等价于先进入mysrc目录再执行go test a,但实际终端仍停留在仓库根目录,完美匹配dlv的启动要求。

补充说明

你之前在根目录执行go test mysrc/a失败,原因是Go会将mysrc/a当作模块路径的一部分去查找,而根目录没有go.mod文件,无法识别这个包属于哪个模块。而使用./mysrc/a(相对路径)加上-modfile,或者用-C切换模块目录,就能让Go正确找到模块定义和测试文件。

另外你提到的dlv编译命令go build -o __debug_bin2596382558 -gcflags all=-N -l ./mysrc/a能正常运行,是因为./mysrc/a作为相对路径的包,Go会扫描该目录下的go.mod来确定模块信息,但go test的参数解析逻辑略有不同,所以需要额外指定模块相关参数。

内容的提问来源于stack exchange,提问作者Gabriel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:07