0

我在一个大型项目中使用了一个名为“ yaegi ”的开源项目。

我需要使用旧版本的 "yaegi": v.0.8.11,所以我修改了go.mod文件并替换了:
github.com/traefik/yaegi v0.9.2 // indirect但是github.com/containous/yaegi v0.8.11
当我构建项目时,它开始更新所有模块并将其替换回最新版本:

root@ubuntu:~/myproj1# go build main.go
go: finding module for package github.com/traefik/yaegi/stdlib/unsafe
go: finding module for package github.com/traefik/yaegi/stdlib
go: finding module for package github.com/traefik/yaegi/interp
go: found github.com/traefik/yaegi/interp in github.com/traefik/yaegi v0.9.2

如何防止它并使用旧版本保留它v.0.8.11
我根据https://tip.golang.org/cmd/go/#hdr-Maintaining_module_requirements阅读

go命令本身会自动更新go.mod文件以保持标准格式和require语句的准确性。

任何找到不熟悉的导入的 go 命令都会查找包含该导入的模块,并自动将该模块的最新版本添加到 go.mod 中。[…]

任何 go 命令都可以确定缺少模块要求并且必须添加 […]。

也许有办法绕过它?

4

1 回答 1

2

//indirectingo.mod表示您要导入的其他模块中至少有一个依赖于该版本的模块,因此go build无论您如何更改go.mod. 在您的情况下,如果您不想使用yaegi模块,v0.9.2则必须首先从项目中摆脱依赖于该模块的其他依赖项,然后修复您go.mod的项目以使您的项目 require yaegi v0.8.11。您可以yaegi通过使用旧版本或编辑其源代码来删除它们或使它们需要早期版本。此外,go.mod我不会直接编辑,而是运行类似go get -v github.com/containous/yaegi@0.8.11结帐到特定版本的模块的操作。

于 2020-10-14T17:07:36.737 回答