Go module 如何釋出 v2 及以上版本?
用上 Go module 之後,釋出的版本都在 v1 上面,用了這麼長時間遇到了升級 v2 版本的問題。記錄一下。
用上 go mod 之後,依賴包都是通過版本打 tag 的形式確定版本號。比如 github.com/mnhkahn/gogogo v1.0.9
。每次都改動都是在累加低位的版本號,一直這麼用也挺安逸的。突然有一天,我的一個底層包需要大改,導致和之前的版本徹底不相容,這種情況下如何設定版本號,如何能讓呼叫方成功接入?
Go module 版本號
先講一下 Go 在用的版本號協議 semver (Semantic Versioning)。它定義的版本號格式是:
vMAJOR.MINOR.PATCH
- MAJOR 主版本號,如果有大的版本更新,導致 API 和之前版本不相容。我們遇到的就是這個問題。
- MINOR 次版本號,當你做了向下相容的新 feature。
- PATCH 修訂版本號,當你做了向下相容的修復 bug fix。
- v 所有版本號都是 v 開頭。
比如我們用的 Go 語言,目前是 1.12.0。它還是 Go 1,每次升級都保證是相容的,12 的版本號是新 feature,而最末尾的版本號是修復。說明當前的版本上了之後還沒有修復過問題。
我這次也是搞了一個不相容的更新,所以需要升級到 v2.0.0。
Go 專案如何升級 v2?
假設你的專案已經支援 go module 了。
- 修改
go.mod
第一行,在 module 那行最後加上/v2。module github.com/mnhkahn/aaa/v2
。 - 對於不相容的改動(除了 v0 和 v1),都必須顯示得修改 import 的路徑。所以我們的引用需要改成
import "github.com/mnhkahn/aaa/v2/config"
。在所有的地方都需要修改,包括自己的包內和呼叫方包。 - 底層包的更新有個小工具可以幫助快速實現 mod。
GO111MODULE=on go get github.com/marwan-at-work/mod/cmd/mod mod upgrade
。 - 程式碼提交之後需要打新 tag,v2.0.0。
- 呼叫方修改引用程式碼,需要加 v2,和第二步提到的一樣。
go get github.com/mnhkahn/aaa/v2
。
incompatible
有時候你能在 go.mod
檔案中發現不相容的標記,v3.2.1+incompatible,這是因為這個依賴包沒有使用 go module,並且它通過 git 打了 tag。
v0.0.0-20190312205133-abcdefghijklm
對於沒有打 tag 的倉庫,go.mod 就會很醜陋,它的格式是 pseudo-version。它的含義是 v0.0.0-yyyymmddhhmmss-abcdefabcdef。
tag 刪除了重建為什麼沒效果?
困擾了我很久的一個問題。有一個 tag v2.0.0 的程式碼有問題,我刪除了這個 tag,新建了一個好的版本,但是 go get 依然報錯,困擾了很久,一直以為是 v2 的版本號寫錯了。後來才發現是 go 有本地快取,快取在 $GOPATH/pkg/mod/cache
下面,把裡面的內容清掉,重新獲取即可。
更多詳情請餐卡Go 1.11 Modules
原文地址:https://blog.cyeam.com/go/2019/03/12/go-version
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Go Module 如何釋出 v2 以上版本Go
- go-carbon 2.0.0 版本釋出, 要求最低 golang 版本 1.16Golang
- go-carbon 2.1.0 版本釋出, 增加對 go1.18 版本的相容支援Go
- VisualStudio 2022 如何顯示 dotnet 6 及以上版本的框架的程式碼註釋為中文框架
- dubbo-go v3 版本 go module 踩坑記Go
- go-carbon 1.3.8 版本釋出,新增ToXXXStringWithTimezone方法Go
- Go 語言 Excel 類庫 Excelize 2.0.0 版本釋出GoExcelize
- go-carbon 1.3.0 版本釋出,新增 XXXNoOverflow() 系列方法Go
- ? Hyperf 釋出 Nats 元件及 v1.1.5 版本元件
- Go 語言 Excel 文件類庫 excelize 釋出 1.4.1 版本GoExcelize
- Excelize 釋出 2.0.1 版本,Go 語言 Excel 文件基礎庫ExcelizeGo
- Excelize 釋出 2.5.0 版本,Go 語言 Excel 文件基礎庫ExcelizeGo
- Excelize 釋出 2.7.1 版本,Go 語言 Excel 文件基礎庫ExcelizeGo
- go-carbon 1.2.7 版本釋出,優化Yesterday()、tomorrow()等方法Go優化
- SpringBoot2.6.x及以上版本整合swagger文件Spring BootSwagger
- Go module vendorGo
- go vendor moduleGo
- openssl 證書生成筆記(go 1.15版本以上)筆記Go
- ? Hyperf 釋出 Retry 重試元件及 v1.1.7 版本元件
- 如何完成一次Apache的版本釋出Apache
- Golang之go module開發系列二--使用偽版本和GoCenterGolang
- Go 語言 Excel 文件類庫 excelize 釋出1.4.1版本GoExcelize
- go-carbon 1.2.4 版本釋出,新增系列時間比較方法Go
- go-carbon 1.4.3 版本釋出,新增對json.UnmarshalJSON()的支援GoJSON
- go-carbon 1.2.7 版本釋出,最佳化Yesterday()、tomorrow()等方法Go
- Go 1.17.3 和 Go 1.16.10 釋出Go
- jQuery 釋出 3.4.0 版本jQuery
- Rust 1.83.0 版本釋出Rust
- Go 1.18 正式釋出!Go
- npm module 釋出 遇到的幾個問題NPM
- Go Search Extension 版本釋出! 一款超實用小工具Go
- Excelize釋出2.0.1版本,Go語言Excel文件基礎庫ExcelizeGo
- go-carbon 1.3.5 版本釋出,修復已知bug和優化效能Go優化
- IntersectionObserver v2版本Server
- Go1.14.2/Go1.13.10 釋出Go
- Go學習總結-go moduleGo
- SOA新版本釋出
- openGauss 2.0.0 版本正式釋出