依賴管理這一路
最開始選擇使用 govendor 作為項目的依賴管理。原因是對比了 Godoc 推薦的幾個依賴管理工具,govendor 跟其他幾個工具相比,目錄最乾淨,只有一個 vendor 檔案夾。(而且當時選用的 web 架構 gin 也使用了 govendor)
後來在同事的推薦下更換了“官方”的 dep,從 govendor 無痛切換為 dep。項目目錄下多了兩個討厭的 Gopkg.* 檔案。之前瞭解的 Go 語言最佳實務並不包含這種首字母大寫的檔案命名方式。但是還是用了下來,誰讓是“官方”出品呢。(後來瞭解到 dep 是官方社區的產物)
dep 沒用多久,vgo 就來了。剛瞭解到 vgo 的時候專門去 dep 的 github 瞭解了一下。發現 dep 還在正常開發。對比 vgo 之後發現使用方式和命名方式截然不同。(兩個團隊分別的產物,相關八卦可以自行 Google)。
這次 vgo 並沒有直接體驗,聽說 vgo 最後是要合并到 go tool 工具鏈中的。並且發現會在 go 1.11 版本中在2018年8月發布。於是沉下心,等合并到 go tool 中之後再體驗。
vgo 和 go1.11beta2 及 go1.11beta3 的使用方式略有不同,本文直接以最新的 beta3 版本樣本
安裝 golang beta 版
體驗 golang beta 版本比想象中要容易的多,直接輸入以下命令
go get -v golang.org/dl/go1.11beta3go1.11beta3 download
beta 版本的 go 跟正式版本的 go 互不影響,使用beta版本的時候直接使用命令
go1.11beta3 run **
方式
使用 go modules
在使用之前需要開啟gomodules,直接在 $GOPATH/src 目錄下執行以下命令,修改環境變數
export GO111MODULE=on
初始化
接下來我們來初始化go modules,來到項目目錄下,執行命令
go1.11beta3 mod init
執行命令後,會在項目目錄下發現go.mod
檔案。如果發現了這個檔案,說明已經初始化成功。這個檔案因為沒有同步依賴關係,所以檔案裡只有一行,就是項目目錄
如果你的項目之前使用了 dep 或其他依賴管理工具,那麼在首次使用
go mod
的時候會自動同步依賴關係,並提示從某工具遷移到 go modules。這招果然漂亮,直接從其他社區工具接管。
建立依賴關係
執行以下命令會自動分析項目裡的依賴關係同步到go.mod
檔案中,同時建立go.sum
檔案
go1.11beta3 mod tidy
在日後的開發工作中,直接使用這個命令就可以增刪同步依賴關係。
使用 vendor 檔案夾
以上的管理依賴管理操作,所以依賴包還是在GOPATH/src
目錄下,go module 當然可以把包直接放在當前項目中管理。
go1.11beta mod vendor
直接使用這個命令就可以把GOPATH/src
目錄下的依賴包同步到當前項目目錄中。