go modules
关于go的第三方包的依赖管理,项目小的时候还不觉得多麻烦,当项目越来越大,引入的第三方包越来越多的时候,这个时候问题就很头痛了,golang官方建议是一个项目一个GOPATH,但是鉴于很多人都不这么做(我也不这么做,因为麻烦),于是在go1.11的时候推出了这个go modules来解决依赖管理的问题。
使用
由于这个go modules和GOPATH可能是天生不和,如果配置了GOPATH的话,这个go modules是默认不开启的。
开启也很简单,只要在命令行中键入下面命令就行了。
export GO111MODULE=on # 开启GoModule特性
不过这种是一次性的,重启之后就会消失,所以可以在环境信息文件/etc/profile
的最后面添加上一行
export GO111MODULE=on
使用命令source /etc/profile
让其生效。
GO111MODULE
解释, 当为on
时则使用Go Modules
,go 会忽略 $GOPATH
和 vendor
文件夹,只根据go.mod
下载依赖。当为 off
时则不适用新特性 Go Modules
支持,它会查找 vendor
目录和 $GOPATH
来查找依赖关系,也就是继续使用“GOPATH模式”。当为 auto
时或未设置时则根据当前项目目录下是否存在 go.mod
文件或 $GOPATH/src
之外并且其本身包含go.mod
文件时才会使用新特性 Go Modules
模式,并且auto
为 GO111MODULE
的默认值。
goproxy
关于goproxy,简单来说就是一个代理,让我们更方便的下载哪些由于墙的原因而导致无法下载的第三方包,比如golang.org/x/
下的包,虽然也有各种方法解决,但是,如果是你在拉取第三方包的时候,而这个包又依赖于golang.org/x/
下的包,你本地又恰恰没有,当然不嫌麻烦的话,也可以先拉取golang.org/x/
下的包,再拉取第三方包。<