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