Go Mod
Go 1.11提出的新的包管理思路,支持用 模塊 的方式看一個Go程序,用go.mod管理版本信息,基本是自動生成
GO111MODULE=on //忽略vendor和gopath下的文件夾
1. 基本操作
生成空的go.mod文件
go mod init <your module path>
自動填寫依賴,生成go.sum。sum主要為了記錄曾經用過的以來,用版本的hash做記錄。
go build
更改完后,查看當前依賴和版本 ===> 需要重新 go build 更新 mod 文件
go list -m all
go list -m -version '可能是git上的鏈接' //查看過去版本號
如果需要手動修改依賴,使用分支版本/過去的版本,用以下命令行:
go mod edit -replace 'module name'
回退版本:
go get github.com/gin-gonic/gin@v1.1.4 獲取之前版本,這樣版本就回退了。。 go mod edit -require="github.com/gin-gonic/gin@v1.1.4" + go tidy 更改依賴版本號,並下載對應包。。
升級版本:
go get -u
go get <repos>@<branch name>//update to the lastest version of current branch
下載需要的package
go mod download
2. 其他命令
清除不需要的依賴
go mod tiny
find out where any of your dependencies are used
go mod why -m <module>
mod生成vendor目錄
go mod vendor
3. 代理
1.1時推出的新環境變量,為golang的代碼倉庫做鏡像代理
如何配置:
配置環境變量
export GOPROXY=https://。。。。
proxy失敗后,不會自動回源,因此可以用goc工具,
可用代理:
gocenter.io
goproxy.io
Go vendor
過去go vendor提出的包管理工具,原理就是把GOPATH下管理的文件拷貝到項目目錄下的vendor目錄下,如果項目目錄下有vendor文件夾,那優先調用vendor目錄下的依賴。
1. 初始化
govendor init
2. 加入現有依賴,一次性加入所有依賴庫
govendor add +external
3. 添加本地GOPATH下的依賴(當你開始編輯了項目,調用了新的依賴)
govendor add [addr]@[version / commit id]
4. 獲取本地不存在 或 不是最新的 (從網上獲取,介於部分依賴地址屬於被安全上網的范疇內,可能需要配置代理)
govendor fetch
5. 移除
govendor remove [addr] / +unused
govendor命令比較簡單,可以直接使用govendor --help獲取提示信息,功能正如字面意思一樣。
-> 有些坑在於,無法解決循環依賴的問題,而且本地庫不夠新,用update會出現沒什么卵用的情況,更新后會瘋狂調用報錯,可能會出現需要大范圍go get更新本地代碼庫==
-> 並且當vendor.json里已經失效包時,需要手動刪除.json里的對應條目
介於govendor已經沒有人維護了,可以優先使用go mod,雖然也很垃圾