exclude 命令
**作用:**排除指定 go 包【有bug(或不想要)的版本】
**问题:**直接不引用就好,为什么会有这个需求?
**答:**我们引用多个包,这些包中可能都包含着【相同的某个包,同时版本也很杂乱】,这个包也会间接的被引用到本项目,但是【该包有些版本有bug,我们不想引入】,所以采用【exclude】排除该包的 bug 版本
项目的引用
module github.com/renhongcai/gomodule
go 1.13
require (
github.com/google/uuid v1.0.0
golang.org/x/text v0.3.2
)
replace golang.org/x/text v0.3.2 => github.com/golang/text v0.3.2
假如,当前uuid仅有
v1.0.0
、v1.1.0
和v1.1.1
三个版本可用,而且我们假定v1.1.0
版本有严重bug。 此时可以使用exclude
指令将uuid的v1.1.0
版本排除在外,即在go.mod
文件添加如下内容:exclude github.com/google/uuid v1.1.0
虽然我们暂时没有使用uuid的v1.1.0
版本,但如果将来引用了其他包,正好其他包引用了uuid的v1.1.0
版本的话,此时添加的exclude
指令就会跳过v1.1.0
版本。
被动引入的包
具有 bug 版本 v1.1.0 的 go包
module github.com/renhongcai/exclude
go 1.13
require github.com/google/uuid v1.1.0
本项目引入
module github.com/renhongcai/gomodule
go 1.13
require (
github.com/google/uuid v1.1.0
github.com/renhongcai/exclude v1.0.0
golang.org/x/text v0.3.2
)
replace golang.org/x/text v0.3.2 => github.com/golang/text v0.3.2
exclude的作用
但如果添加了exclude github.com/google/uuid v1.1.0
指令后,编译时github.com/renhongcai/gomodule
依赖的uuid版本会自动跳过v1.1.0
,即选择v1.1.1
版本,相应的go.mod
文件如下所示:
module github.com/renhongcai/gomodule
go 1.13
require (
github.com/google/uuid v1.1.1
github.com/renhongcai/exclude v1.0.0
golang.org/x/text v0.3.2
)
replace golang.org/x/text v0.3.2 => github.com/golang/text v0.3.2
exclude github.com/google/uuid v1.1.0
在本例中,在选择版本时,跳过uuid
v1.1.0
版本后还有v1.1.1
版本可用,Go 命令行工具可以自动选择v1.1.1
版本,但如果没有更新的版本时将会报错而无法编译。