go語言在1.11版本之前,都是使用GOPATH設置模塊搜索路徑,導致三方依賴和自定義依賴等隨意放置,導致項目邏輯非常混亂。但從1.11版本開始,引入了新的go模塊管理機制(go modules)。本文將以1.18版本來對go module做出詳解。為什么對版本1.18情有獨鐘呢,那是因為它推出了工作區的概念,基本思路就是:每一個模塊需要一個go.mod文件用于指定模塊名和go的版本,并不需要指定引用模塊的路徑。
樣例
創建demo模塊
mkdir demo
cd demo
go mod init github.com/demo
go.mod就是整個工程的核心文件。
關鍵字段介紹:
module: 定義模塊路徑
go: 設置版本
require: 要求給定版本或更高版本的特定模塊
exclude: 排除特定版本模塊的使用,不允許的模塊版本被視為不可用,并且查詢無法返回。
replace:使用不同的模塊版本來替代原有模塊版本。通常用于本地調試使用。
go.sum是版本管理文件
每行由模塊導入路徑、模塊的特定版本和預期哈希組成
在每次缺少模塊時,如果緩存中不存在,則需要下載并計算其哈希添加到 go.sum 中;如果緩存中存在,則需要匹配 go.sum 中的已有條目。