5分鐘入門golang module

golang團隊在版本1.13及以後全面支持module機制,用於結束混亂複雜的項目管理機制。同學們可以簡單的將module機制理解成pip、apt-get等包管理工具。

一個項目(倉庫)包括多個module(模塊),一個模塊包括多個package(包),而一個包含多個代碼源文件。

簡單的說,在一個module中,module機制自動保證導入所有源文件中使用的標準庫和第三方包,而不用逐一go get;同時完成版本管理。

假設已安裝golang 1.13或更高版本,則默認開啓module機制,所以可以直接使用module相關的命令。

初始化module

通過go init初始化module後,在該目錄下生成go.mod文件,用於記錄項目中需要的第三方依賴的名稱和版本;由於項目中可能使用相同依賴的不同版本,所以文件根據名稱和版本進行區分。

另外會生成go.sum文件,用於記錄第三方依賴的校驗信息;當有項目交接、遷移等過程時,新的環境必須和go.sum中的記錄相同。所以當有版本控制時,go.mod和go.sum兩個文件一定要提交

$:mkdirgo_module_test && cdgo_module_test
$:gomod init test
go: creating new go.mod: module test
$:catgo.mod
module test #module名稱
go 1.13     #go的版本

導入第三方依賴

之前通過go get來獲取第三方依賴,而基於module機制,只要在源碼中進行導入,通過go run/test/build等命令即可自動獲取並存儲到GOPATH/pkg下,那GOPATH是什麼呢?GOPATH可以認爲是工作目錄,在安裝go的時候會有默認值,可以通過命令查看:

go env | grep GOPATH

當然可以通過命令更改GOPATH目錄

go env -w GOPATH=/xxx/xxx/xxx

通過類似go build等命令,第三方依賴都會被下載到GOPATH/pkg目錄下。

例如,在test目錄下編寫如下源碼並執行:go run main.go

packagemain
​
import(
   "fmt"
   "rsc.io/quote"
)
​
funcmain() {
   fmt.Println(quote.Hello())
}

大家可以發現兩點: 第一、GOPATH/pkg下有quote的第三方包; 第二、go.mod多了一行:require http://rsc.io/quote v1.5.2 // indirect。require是關鍵詞,其他的關鍵詞還有module、replace和exclude;v1.5.2是版本。

到這裏其實大家已經可以進行項目開發了,再簡單的介紹幾種命令,可能會用到。

go get:前面提到不需要用go get來獲取第三方依賴,但是module只能自動獲取特定格式的第三方依賴,而對其它非特定格式的第三方依賴依舊需要go get指令。

go get example.com/package   //更新第三方依賴
go get -u example.com/package//下載最新版本的第三方依賴
go get example.com/[email protected]  //下載特定版本的第三方依賴

go mod tidy:檢查所有依賴,刪除沒有使用的依賴。

自從推出module機制,同學們就能愉快的開發項目啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章