什么是go mod
Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。类似于php的composer,java的maven;
Go.mod其实就是一个Modules,关于Modules的官方定义为:
Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。Modules替换旧的基于GOPATH的方法,来指定使用哪些源文件。
Modules和传统的GOPATH不同,不需要包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以作为Modules,只要其中包含有go.mod文件。
如何使用
- 开启go mod
export GO111MODULE=on
go1.11 的 module 功能是默认不会开启的,想要开启也非常简单, 通过一个环境变量即可开启go module
- 初始化
go mod init
该命令会初始化一个mod管理的项目 在项目路径下会有两个文件go.mod go.sum
- 下载包存放位置
golang在运行、编译项目的时候,都会检查依赖并下载依赖包。在启动了go mod之后,通过go mod下载的依赖包,不在放在GOPATH/src中,而是放到GOPATH/pkg/mod中;
- 关于go.sum
你会发现除了 go.mod 这个文件之外,还有一个 go.sum 文件,这个文件保存了每个依赖库的对应的hash值,来保证下载回来的代码库是正确的,不被人篡改的;
- 关于$GOPROXY 被“墙”的问题
export GOPROXY=https://goproxy.io
当我们使用go的时候,go默认会直接从代码库(golang.org)中去下载所需的相关依赖,GOPROXY 这个环境变量可以让我们控制自己从哪里去下载源代码
goproxy.io 是一个开源项目,当用户请求一个依赖库时,如果它发现本地没有这份代码就会自动请求源,然后cache到本地,用户就可以从 goproxy.io 请求到数据。当然,这些都是在一个请求中完成的。goproxy.io 只支持 go module 模式。当用户执行 go get 命令时,会去检查GOPROXY//@v/.info、GOPROXY//@v/.zip 等文件,如果没有就直接从源码库中去下载
有疑问加站长微信联系(非本文作者)