4

一个关于go module的有趣话题

 3 years ago
source link: http://vearne.cc/archives/39468
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一个关于go module的有趣话题

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

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

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

为了验证效果,萌叔创建了项目 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/[email protected]
go get: github.com/vearne/[email protected]: 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


微信支付码


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK