一 go module 常用命令
模塊維護:go mod command arguments
創建模塊:go mod init example.com/hello
清除無用依賴: go mod tidy
測試packages:go test [build/test flags] [packages]
測試當前目錄*_test.go:go test 運行當前文件夾下的_test.go文件
列出packages或模塊:
go list [-f format] [-json] [-m] [list flags] [build flags] [packages]
列出模塊所有的依賴(包括間接依賴):go list -m all
增加並安裝依賴:
go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages]
升級minor版本get get packages
升級依賴module的主版本:
import中加入語義主版本號,比如:import quoteV3 "rsc.io/quote/v3"
二 發布go module
語義版本:
語義版本由vMAJOR.MINOR.PATCH構成,當新發布版本公共API不兼容已發布版本時,新增MAJOR主版本號;當新增函數等兼容已發布版本時,增加MINOR;不改變API和則依賴時,比如修復bug,增加PATCH。
V0為初始不穩定版本,v1為第一個穩定版本。
給本地分支打標, 默認標簽是打在最新提交的commit上:git tag v0.1.0
將本地分支標簽推送到遠端:git push origin v0.1.0
三 發布v2及以上版本
模塊的V2及以上版本必須帶有有不同的模塊導入路徑,路徑帶上major version。
在模塊下新建v2子目錄,將模塊下所有的*.go文件全部銬入v2目錄,將go.mod拷入v2目錄,並修改module名稱。
修改模塊名稱:
go mod edit -module github.com/killianxu/gopher/v2 v2/go.mod
將我們項目依賴的模塊全改成v2版本:
find . -type f -name '*.go' -exec sed -i -e 's,github.com/my/project,github.com/my/project/v2,g' {} \;
find查找指定文件,.表示本目錄及子目錄,-type表示文件類型(f普通文件),-name表示文件名,-exec執行指令,-exec和{}結合表示匹配的所有文件[5]。
sed是流編輯器,用於文本處理,sed讀入文件行進緩沖區,處理完成輸出到屏幕,然后處理下一行。
命令用法:sed [options] 'command' file(s)
-e可以在同一行里執行多條命令,-i直接更改原文件。command中s表示替換,g表示對所有行進行替換。
git tag v2.0.0
將本地分支標簽推送到遠端:git push origin v2.0.0
參考文獻
[1] Using Go Modules.https://blog.golang.org/using-go-modules
[2] Command go.https://golang.org/cmd/go/
[3] Publishing Go Modules.https://blog.golang.org/publishing-go-modules
[4] Go Modules: v2 and Beyond.https://blog.golang.org/v2-go-modules
[5] find命令.https://man.linuxde.net/find
[6] sed命令.https://man.linuxde.net/sed