猿问

golang 模块名称更改导致本地测试失败

我有一个某人的代码的分支。它们的模块名称格式如下:


module github.com/foo/bar/v3

我已经在本地进行了一些更改,并将本地更新为 isgo.mod而v4不是,v3但这现在会导致本地测试的运行失败(见下文,我已经对输出进行了通用化)。


注意:go.sum此时为空。


$ go test -v


go: finding module for package github.com/foo/bar/v3

go: found github.com/foo/bar/v3 in github.com/foo/bar/v3 v3.0.0

# github.com/foo/bar/v4_test [github.com/foo/bar/v4.test]

./some_test.go:232:19: x.Y undefined (type *package.Example has no field or method Y)

FAIL    github.com/foo/bar/v4 [build failed]

我不确定它为什么要尝试定位包的实际 v3 版本,从而更新 go.sum 以包含它?


我可以从测试文件中看到,这个包使用了不同的包名(例如package foo_test),因此在编写测试代码时它不依赖导出的数据结构存在。所以也许这就是为什么会发生这种情况?它看到了对的引用x.Y,然后去xgithub 中查找。


但是我不确定为什么当我在 go.mod 文件中使用 v3 引用时测试会运行良好?


关于这里发生的事情以及在处理分叉项目时碰撞 go 模块的正确过程应该是什么想法?


紫衣仙女
浏览 233回答 1
1回答

POPMUISE

如果您在文件中更改module名称go.mod,则必须将所有import路径替换为更新后的module名称。当你用 替换你的模块github.com/foo/bar/v3时github.com/foo/bar/v4,你必须在find and replace整个项目中github.com/foo/bar/v3使用。github.com/foo/bar/v4然后你$ go test -v应该正常运行。
随时随地看视频慕课网APP

相关分类

Go
我要回答