为何在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
相关产品推荐
相关产品推荐

