Go module 使用教程

go module 介紹:

自Go1.1.1版本發佈(2018-08-24發佈),從官方的博客中看到,其中有個比較突出的特色就是module,模塊概念。

module是一個相關Go包的集合,它是源代碼更替和版本控制的單元。模塊由源文件形成的go.mod文件的根目錄定義,包含go.mod文件的目錄也被稱爲模塊根。moudles取代舊的的基於GOPATH方法來指定在工程中使用哪些源文件或導入包。模塊路徑是導入包的路徑前綴,go.mod文件定義模塊路徑,並且列出了在項目構建過程中使用的特定版本。

該功能到時候就可以移除對GOPATH和go get命令的支持。

go module 常用命令:

go mod init  #當前模塊下初始化

go mod go mod  tidy #添加缺失的模塊以及移除無用的模塊

go mod  verify #驗證依賴項是否達到預期的目的

go mod vendor #生成vendor文件夾

配置環境變量 GO111MODULE:

GO111MODULE它有三個可選值: off、 on、 auto,默認值是 auto。

1.GO111MODULE=off,無模塊支持,go會從 GOPATH 和 vendor 文件夾尋找包。

2.GO111MODULE=on,模塊支持,go會忽略 GOPATH 和 vendor 文件夾,只根據 go.mod下載依賴。

3.GO111MODULE=auto,在 $GOPATH/src外面且根目錄有 go.mod文件時,開啓模塊支持。

go.mod 文件:

go.mod文件定義module路徑以及列出其他需要在build時引入的模塊的特定的版本。
go.mod文件會在go mod init 時會自動生成,當項目不在GoPath下,需要go mod init [模塊名];

在生成的go.mod文件中,我們可以修改版本號如下方的v1.3.0,來指定版本

require (
    github.com/gin-gonic/gin v1.3.0
)

還有一點需要注意的是,在國內訪問不少第三方包都需要科學上網:

我們可以在項目下 打開cmd通過命令行設置代理,然後再執行go mod的命令即可;

也可以在go.mod中使用replace替換成github上對應的庫。

具體使用步驟:

  1. 首先將你的Go更新到1.11以上版本;
  2. 如果項目在GoPath目錄下,設置系統環境變量GO111MODULE=on;
  3. 執行命令go mod init [模塊名] 在當前目錄下生成一個go.mod文件;
  4. 如果你工程中存在一些不能確定版本的包,那麼生成的go.mod文件可能就不完整,因此繼續執行下面的命令;
  5. 執行go mod tidy命令,它會添加缺失的模塊以及移除不需要的模塊。執行後會生成go.sum文件(模塊下載條目)。添加參數-v,例如go mod tidy -v可以將執行的信息,即刪除和添加的包打印到命令行;
  6. 執行命令go mod verify來檢查當前模塊的依賴是否全部下載下來,是否下載下來被修改過。如果所有的模塊都沒有被修改過,那麼執行這條命令之後,會打印all modules verified。
  7.  執行命令go mod vendor生成vendor文件夾,該文件夾下將會放置你go.mod文件描述的依賴包,文件夾下同時還有一個文件modules.txt,它是你整個工程的所有模塊。在執行這條命令之前,如果你工程之前有vendor目錄,應該先進行刪除。同理go mod vendor -v會將添加到vendor中的模塊打印出來;

 常見的命令如下,格式爲 go mod  COMMAND: 

命令 解釋
init -【模塊名】 初始化modules
download 下載modules到本地cache
edit 從工具或腳本中編輯go.mod文件
graph 以文本模式打印模塊需求圖
tidy 檢查,刪除錯誤或者不使用的modules,下載沒download的package
vendor 生成vendor目錄
verify 驗證依賴是否正確
why 解釋爲什麼需要包或模塊

       本人由go vendor管理轉到go module折騰了很久,踩了很多各種各樣的坑,在此不便過多贅述,小夥伴若遇到其它問題,歡迎留言交流。

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