我有别人的代码。其模块名称的格式如下:
module github.com/foo/bar/v3
我在本地进行了一些更改,并将本地go.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
的引用,然后在github中查找x
。
但是我不确定为什么当我在go.mod文件中使用v3引用时测试能否正常运行?
关于分叉项目时,这里发生了什么以及应该如何碰撞go模块的任何正确想法?
谢谢。
答案 0 :(得分:3)
如果更改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
。
然后您的cypress.get('').should('')
应该可以正常运行。