如果你用到了一个库的 v2 版本,你依赖的另外一个库用到了该库的 v1 版本,而二者不兼容,该如何处理呢?
我之前在用到比如 github.com/urfave/cli/v2
和 github.com/go-playground/validator/v10
这种库时,经常会看到一个库可以有多个版本,方便做版本的升级。
golang 本身在 1.13 版本后支持通过 go mod 的方式,引入同一个包的不同版本,防止出现交叉引用时出现的不兼容情况。
项目的 v1 版本
app.go
1 | package mod |
go.mod
1 | module github.com/phpcyy/mod |
将项目打上 tag v1.0.0 并发布。
项目的 v2 版本
app.go
1 | package mod |
go.mod
1 | module github.com/phpcyy/mod/v2 |
将项目打上 tag v2.0.0 并发布。
测试
在另外一个项目中,执行 go get github.com/phpcyy/mod
和go get github.com/phpcyy/mod/v2
来引入不同版本的库。
1 | package main |
打印显示
1 | v1 |
这样便可以做到在一个项目中引入一个库的不同版本。
具体代码见于 github.com/phpcyy/mod,可以作为一个小示例。