保护私人版权,尊重他人版权。转载请注明出处并附带页面链接
Go Module常用命令
1 | go mod init #初始化go.mod |
Go Module介绍
go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用
go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等
使用go module之后我们可不用将代码放置在src下了
设置Go Module
查看当前golang env配置
1 | go env |
1.13版本GO111MODULE 默认是auto, 1.13+版本根据目录下有没有go.mod文件判断是否开启Module,可以手动设置为on/off
1 | go env -w GO111MODULE="on" |
设置代理 go env -w GOPROXY=下面代理的其中一个
1 | htps://goproxy.io |
###使用Go Module
一、初始化 在项目根目录下会生成go.mod文件
1 | go mod init [模块名] |
二、检测依赖
1 | go mod tidy |

检测当前项目所有引入的依赖,原则是先拉最新的release tag,若无tag则拉最新的commit
,并写入go.mod,此时依赖还没下载。可以通过修改package后的tag或commitID决定引入的版本。indirect
表示间接依赖,即引入了依赖包A,依赖包A引入了依赖包B,依赖包B即为间接依赖。当依赖包A没有使用go.mod或者依赖包A的go.mod文件没有依赖包B时,依赖包B才会写在当前项目的go.mod文件中。incompatible
当module名字未遵循Golang推荐在module名中附带版本信息,称这个module为不规范的module。正常使用无影响,但遇到大版本跨越更新时要注意不兼容的改变。以github.com/blang/semver为例,module最新版本为v3.6.0.但go.mod中记录的module是module github.com/blang/semver, 则这个module是不规范module
可以使用命令
go list -m -u all
来检查可以升级的package,使用go get -u need-upgrade-package
升级后会将新的依赖版本更新到go.mod * 也可以使用go get -u
升级所有依赖
三、下载依赖
需要先设置GOPROXY,依赖下载至$GOPATH/pkg/mod/
下,并在项目根目录下生成go.sum文件
1 | go mod download |
go get 升级
运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
运行 go get -u=patch 将会升级到最新的修订版本
运行 go get package@version 将会升级到指定的版本号version
运行go get如果有版本的更改,那么go.mod文件也会更改
四、导入依赖
将刚下载至GOPATH下的依赖转移到该项目根目录下的vendor(自动新建)文件下
1 | go mod vendor |
五、解决冲突
module declares its path as: A but was required as: B
模块路径声明为A,需要改成B
解决:在go.mod文件中增加 replace A => B
依赖包不同版本冲突
解决:使用别名
1 | import( |