Go模块和依赖修改供应商

Go modules and dependencies with modified vendors

我正在尝试将一个 Go 项目转换为新的模块标准,但我在一个依赖项上遇到了问题。

该存储库出售了一个库(在本例中为 golang。org/x/net/html)以向该库添加一些功能;这意味着它已经修改了 vendored 依赖项(向结构添加了一个方法)。

所以问题是,在执行 go mod init 之后,当我执行 go get ./... 时,系统抱怨调用该添加的功能,因为它忽略了修改后的供应商并尝试导入上游库相反。

有什么方法可以让 go mod 知道它应该使用 vendored 依赖项吗?

您可以尝试 replace 指令。类似于

第一个

cd ./vendor/golang.org/x/net/html
go mod init

然后在你的根目录下go.mod

module your/super/module

replace golang.org/x/net/html => ./vendor/golang.org/x/net/html

require golang.org/x/net/html v0.0.0

请注意,requirereplace 都是必需的。

go1.15 之后,您可以使用 -mod=readonly 构建以避免仅从供应商目录导入。

示例:

go build -mod=readonly -o ./build/project -ldflags "-s -w" main.go