Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

1. 引言

假如你正在使用go mod管理某个项目的代码库依赖

  • case1: 某个项目的tag是超过v1版本的,你该怎么定义module
  • case2: 某个项目要同时进行2个版本的开发,v2和v3 你该怎么定义module

2. 问题

为了验证效果,萌叔创建了项目 vearne/mod-multi-version

这个代码库只有一个文件

package mmv

import "fmt"

const Versoin = "v1.0.0"

func PrintVersion(){
    fmt.Println("version:", Versoin)
}

其它项目使用vearne/mod-multi-version

package main

import (
    "github.com/vearne/mod-multi-version"
)

func main() {
    mmv.PrintVersion()
}

代码库的tag列表中包含以下tag

v1.0.0
v1.0.2
v2.0.1-Alpha
v2.0.5
v2.0.6
v3.0.0
v3.0.1

但如果你试图拉取v2.0.1-Alpha

╰─$ go get github.com/vearne/mod-multi-version@v2.0.1-Alpha
go get: github.com/vearne/mod-multi-version@v2.0.1-Alpha: invalid version: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2

错误提示主版本号只能是v0或者v1

3. 需要导入v2库怎么办?

v2.0.5-go.mod

module github.com/vearne/mod-multi-version/v2 
go 1.16

v3.0.0-go.mod

module github.com/vearne/mod-multi-version/v3
go 1.16

注意module名称已经发生了变化
其它项目使用vearne/mod-multi-version时,也要注意module名称的变化

示例
package main

import (
    "github.com/vearne/mod-multi-version/v2"
)

func main() {
    mmv.PrintVersion()
}

总结

现在我们已经很清楚了,只需要修改go.mod中module的定义,就可以方便的引入主版本大于v1的情况了。对于case2的情况,可以拉2个不同的分支branch_v2branch_v3来对应v2v3的开发。最后,不要忘了修改go.mod

参考资料

Go Modules: v2 and Beyond


打赏我

微信支付码

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据