天天看點

Go語言開發小技巧&易錯點100例(四)

往期回顧:

  • 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哈希值]