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
请注意,require
和 replace
都是必需的。
在 go1.15
之后,您可以使用 -mod=readonly
构建以避免仅从供应商目录导入。
示例:
go build -mod=readonly -o ./build/project -ldflags "-s -w" main.go
我正在尝试将一个 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
请注意,require
和 replace
都是必需的。
在 go1.15
之后,您可以使用 -mod=readonly
构建以避免仅从供应商目录导入。
示例:
go build -mod=readonly -o ./build/project -ldflags "-s -w" main.go