往期回顧:
- Go語言開發小技巧&易錯點100例(一)
**本期看點(技巧類用【技】表示,易錯點用【易】表示)**:
(1)Go Module中對依賴庫版本的更新與降級【技】
(2)Go goroutine中的異常處理【易】
(3)Go中slice作為參數是值傳遞【技】
正文:
1 Go Module中對依賴庫版本的更新與降級【技】
Go Module引用其他的依賴庫分為兩種方式:
- 引用該庫的某一個tag
- 引用該庫的某一個分支(稱之為僞版本)
因而顯示上也會有差别(大多數情況下),如下:
github.com/coreos/go-semver v0.3.0 //引用tag
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf //引用分支
但是不管是引用tag還是引用分支,指向的都是該倉庫的分支或tag送出最後一個commit時的鏡像,因而版本的更新與降級的最小顆粒度就是commit
先看針對tag進行升降級:
# 檢視該依賴庫的所有版本
go list -m -versions github.com/xuri/excelize/v2
# 輸出:
github.com/xuri/excelize/v2 v2.0.0 v2.0.1 v2.0.2 v2.1.0 v2.2.0 v2.3.0 v2.3.1 v2.3.2 v2.4.0 v2.4.1 v2.5.0 v2.6.0 v2.6.1
# 檢視目前項目依賴庫的版本
go list -m github.com/xuri/excelize/v2
# 輸出:
github.com/xuri/excelize/v2 v2.6.1
# 指定想要切換到的版本
go get github.com/xuri/excelize/[email protected]
# 輸出:
go: downloading github.com/xuri/excelize/v2 v2.6.0
go get: downgraded github.com/xuri/excelize/v2 v2.6.1 => v2.6.0
**針對分支或commit升降級(前提是知道之前一個commit的僞版本資訊)**:
比如你之前一個引用的commit是
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf
目前是:
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf
想要切換回去,可能go get就不是很管用了,那麼就需要使用新的方式:
replace github.com/coreos/go-systemd => github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf
v0.0.0-[主幹分支最新一次commit的時間]-[commit哈希值]