Go Mod
Go 1.11提出的新的包管理思路,支持用 模块 的方式看一个Go程序,用go.mod管理版本信息,基本是自动生成
GO111MODULE=on //忽略vendor和gopath下的文件夹
1. 基本操作
生成空的go.mod文件
go mod init
自动填写依赖,生成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/[email protected]" + go tidy 更改依赖版本号,并下载对应包。。
升级版本:
go get -u
go get@ //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
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,虽然也很垃圾