在 Go 1.11
以前使用包管理一直被开发者所诟病。既然GOPATH
这种包管理引起了一线开发者的一片骂声,所以,Go
官方体恤一线开发者对GOPATH
这种包管理的情绪,一直致力努力提供对一线开发者友好的包管理解决方法而奋斗。从最初的GOPATH
到
在 Go 1.11
以前使用包管理一直被开发者所诟病。既然GOPATH
这种包管理引起了一线开发者的一片骂声,所以,Go
官方体恤一线开发者对GOPATH
这种包管理的情绪,一直致力努力提供对一线开发者友好的包管理解决方法而奋斗。从最初的GOPATH
到GO VENDOR
,再到现在最新的GO MODULES
,这期间,Go 官方不免走了很多弯路,但展现在我们跟的GO MODULES
已是很像样的模块管理了。
在命令行窗口输入 go env
命令,可以看到,多了个GO111MODULE
变量,111
是代表Go 1.11
版本提出来的。
它有三个可选值:off
、on
、auto
,默认值是auto
。
GO111MODULE=off
禁用模块支持,编译时会从GOPATH
和vendor
文件夹中查找包。GO111MODULE=on
启用模块支持,编译时会忽略GOPATH
和vendor
文件夹,只根据go.mod
下载依赖。GO111MODULE=auto
,当项目在$GOPATH/src
外且项目根目录有go.mod
文件时,自动开启模块支持。
``GO111MODULE在
Go 1.13`版本之后默认是开打的。
go mod 依赖管理
go mod
不再依靠$GOPATH
,以至于它可以不必在$GOPATH
目录创建 Go 项目。
依次在该目录创建文件夹和main.go
文件。
使用以下命令自动生成go.mod
文件。
go mod init github.com/zhenqi/module-main
编辑main.go
文件,输入以下内容。
package main
import (
log "github.com/sirupsen/logrus"
)
func main(){
log.WithFields(log.Fields{
"animal": "walrus"
}).Info("A walrus appears")
}
由于使用了第三方依赖库,需要先下载依赖库。
go get github.com/sirupsen/logrus
执行该语句会报错。
这是由于自Go 1.13
以后的版本,GOPROXY
默认值为proxy.golang.org
,很不巧,这个地址在国内却无法访问啊!那该怎么办呢?好在国内大厂商提供了镜像,那便是 七牛云 推出的 goproxy.cn
,好让国内开发者更好的使用GO MODULES
。
go env -w GOPROXY=https://goproxy.cn,direct
再次运行go get github.com/sirupsen/logrus
命令,可以看到,正在下载第三方依赖。
打开go.mod
文件,明显追加了几行内容。