go mod的介绍与使用
go mod是go的一个模块管理工具,用来代替传统的GOPATH方案
一、安装go,确保版本大于1.11

二、配置go mod和go proxy,执行命令如下:
go env -w GOBIN=/usr/local/go/bin
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct #七牛云代理

配置后查看环境变量,如图:

GO111MODULE有三个值:off, on和auto(默认),说明如下:
- GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包通过旧版本的vendor目录或者GOPATH模式来查找
- GO111MODULE=on,go命令行会使用modules,而不会去GOPATH目录下查找
- GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能
三、通过命令查看go mod的常用命令如下:

其中比较常用的是init、tidy、edit
四、通过go mod 管理项目:
1、初始化项目:
mkdir Goproject #在任意位置创建项目Goproject
cd Goproject
go mod init Goproject #初始化项目
查看创建的go.mod,如图:

2、创建文件a.go,内容如下:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "hello world",
})
})
r.Run()
}
运行后提示需要添加包,go get github.com/gin-gonic/gin,执行命令如下:

完成后查看go.mod的内容,可以看到已经下载了对应的依赖包,如图:

考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一个go.mod文件并不能保证一致性构建,为了解决Go module的这一安全隐患,Go开发团队在引入go.mod的同时也引入了go.sum文件,用于记录每个依赖包的哈希值,在构建时,如果本地的依赖包hash值与go.sum文件中记录得不一致,则会拒绝构建
go.sum内容主要由模块名版本号hash值组成,如图:

注:如果新建一个项目,创建完go.mod文件后,如果项目中需要gin包,但是系统已经安装过了gin包,那么不需要重新执行go get命令安装,只需要执行go mod tidy命令,此命令会查找项目目录下所有文件中引入的依赖,并写入go.mod文件中,执行可以观察到go.mod文件发生了变化,同时生成go.sum文件,此时再次执行go doc gin 就可以查询用法了


