如何将你的 golang 库升级到 v2 版本

技术 Golang

如果你用到了一个库的 v2 版本,你依赖的另外一个库用到了该库的 v1 版本,而二者不兼容,该如何处理呢?

我之前在用到比如 github.com/urfave/cli/v2github.com/go-playground/validator/v10 这种库时,经常会看到一个库可以有多个版本,方便做版本的升级。

golang 本身在 1.13 版本后支持通过 go mod 的方式,引入同一个包的不同版本,防止出现交叉引用时出现的不兼容情况。

项目的 v1 版本

app.go

package mod

func Version() string {
    return "v1"
}

go.mod

module github.com/phpcyy/mod

将项目打上 tag v1.0.0 并发布。

项目的 v2 版本

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,可以作为一个小示例。

创建于2020年09月18日 16:26
阅读量 100
留言列表

暂时没有留言

添加留言