Go module的介紹及使用

2021-10-25 20:21:46 字數 2437 閱讀 3616

go1.1.1版本發布(2018-08-24發布)已經過去幾天,從官方的部落格中看到,有兩個比較突出的特色,乙個就是今天講的module,模組概念。目前該功能還在試驗階段,有些地方還需要不斷的進行完善。在官方正式宣布之前,打算不斷修正這種支援。到時候就可以移除對gopath和go get命令的支援。

如果你想現在想就試試這個新功能module,需要你將你的**倉庫放到gopath/src目錄之外。然後在那個目錄下建立乙個go.mod檔案,從檔案樹中執行go命令。

主要概念介紹

module是乙個相關go包的集合,它是源**更替和版本控制的單元。模組由原始檔形成的go.mod檔案的根目錄定義,包含go.mod檔案的目錄也被稱為模組根。moudles取代舊的的基於gopath方法來指定在工程中使用哪些原始檔或匯入包。模組路徑是匯入包的路徑字首,go.mod檔案定義模組路徑,並且列出了在專案構建過程中使用的特定版本。

go.mod檔案

go.mod檔案定義module路徑以及列出其他需要在build時引入的模組的特定的版本。例如下面的例子中,go.mod宣告example.com/m路徑時module的根目錄,同時也宣告了module依賴特定版本的golang.org/x/text和gopkg.in/yaml.v2。

1.0)go.mod檔案還可以指定要替換和排除的版本,命令行會自動根據go.mod檔案來維護需求宣告中的版本。如果想獲取更多的有關go.mod檔案的介紹,可以使用命令go help go.mod。

go.mod檔案用//注釋,而不用/**/。檔案的每行都有一條指令,由乙個動作加上引數組成。例如:

module my/thing

require other/thing v1.

0.2require new

/thing v2.

3.4exclude old/thing v1.

2.3replace bad/thing v1.

4.5=

> good/thing v1.

4.5

上面三個動詞require、exclude、replace分別表示:專案需要的依賴包及版本、排除某些包的特別版本、取代當前專案中的某些依賴包。

相同動作的命令可以放到乙個動詞+括號組成的結構中,例如:

require (

new/thing v2.

3.4 old/thing v1.

2.3)

go mod命令

go mod提供了一系列操作modules的命令,記住,所有的go命令中現在已經內建了對module的支援,而不僅僅是go mod命令。例如使用go get時,會經常自動在後台新增、移除、公升級、降級依賴包版本。

命令語法:go mod [arguments]。go mod提供的命令有下面幾個,對於比較常用的命令進行詳細說明。

type module struct

go mod init

用法:go mod init [module]。此命令會在當前目錄中初始化和建立乙個新的go.mod檔案,當然你也可以手動建立乙個go.mod檔案,然後包含一些module宣告,這樣就比較麻煩。go mod init命令可以幫助我們自動建立,例如:

虛擬版本號

go.mod檔案和go命令通常使用語義版本作為描述模組版本的標準形式,這樣可以比較不同版本的先後順序。例如模組的版本是v1.2.3,那麼通過重新對版本號進行標籤處理,得到該版本的虛擬版本。形式如:v0.0.0-yyyymmddhhmmss-abcdefabcdef。其中時間是提交時的utc時間,最後的字尾是提交的雜湊值字首。時間部分確保兩個虛擬版本號可以進行比較,以確定兩者順序。

下面有三種形式的虛擬版本號:

vx.0.0-yyyymmddhhmmss-abcdefabcdef,這種情況適合用在在目標版本提交之前 ,沒有更早的的版本。(這種形式本來是唯一的形式,所以一些老的go.mod檔案使用這種形式)

vx.y.z-pre.0.yyyymmddhhmmss-abcdefabcdef,這種情況被用在當目標版本提交之前的最新版本提交是vx.y.z-pre。

vx.y.(z+1)-0.yyyymmddhhmmss-abcdefabcdef,同理,這種情況是當目標版本提交之前的最新版本是vx.y.z。

虛擬版本的生成不需要你去手動操作,go命令會將接收的commit雜湊值自動轉化為虛擬版本號。

環境變數——go111module

go 1.11中的module支援臨時環境變數——go111module,它可以設定以下三個值:off,on或者auto(預設)。

具體使用步驟:

Go module的介紹及使用

go1.1.1版本發布 2018 08 24發布 已經過去幾天,從官方的部落格中看到,有兩個比較突出的特色,乙個就是今天講的module,模組概念。目前該功能還在試驗階段,有些地方還需要不斷的進行完善。在官方正式宣布之前,打算不斷修正這種支援。到時候就可以移除對gopath和go get命令的支援。...

Go module 使用教程

go module 介紹 自go1.1.1版本發布 2018 08 24發布 從官方的部落格中看到,其中有個比較突出的特色就是module,模組概念。module是乙個相關go包的集合,它是源 更替和版本控制的單元。模組由原始檔形成的go.mod檔案的根目錄定義,包含go.mod檔案的目錄也被稱為模...

4 使用Go module匯入本地包

假設我們現在有moduledemo和mypackage兩個包,其中moduledemo包中會匯入mypackage包並使用它的new方法。mypackage mypackage.go內容如下 package mypackage import fmt func new 現在分兩種情況討論 1 同乙個專...