GoPath的缺点:

1.无版本控制概念
2.无法同步一致第三方版本号
3.无法指定项目的第三方版本号

GoModule使用:

约束

golang版本号必须为1.14及以上版本

环境配置

环境查看

go env

配置GOMODULE

1.开启Go Modules,GO111MODULE存在三个值:auto(当项目中存在go.mod自动开启)、on(强制开启,推荐)、off(关闭)
go env -w GO111MODULE=on
2.设置GOPROXY,默认的代理是国外的https://proxy.golang.org,direct,需要设置为国内地址
1)阿里云:https://mirrors.aliyun.com/goproxy/
2)七牛云:https://goproxy.cn,direct (direct表示如果源仓库里不存在该依赖,则会跳转至原始地址拉取依赖)
go env -w GOPROXY=https://goproxy.cn,direct
3.设置GOSUBMDB,该属性用于在拉取模块时对模块进行校验,保证拉取的模块是未被篡改的,如不使用的话可以设置为off(不建议设置)
4.当使用依赖为公司私有的,不需要去仓库源拉取需要设置
GONOPROXY:通过设置GOPRIVATE即可
GONOSUMDB:通过设置GOPRIVATE即可
GOPRIVATE:指定该包为私有不会进行代理下载和校验
示例:
#表示git.example.com和github.com/aceld/zin为私有路径不会从代理下载
go env -w GOPRIVATE=”git.example.com,github.com/aceld/zinx”
#通配符,表示所有模块为example.com的子域名都不会去下载校验
go env -w GOPRIVATE=”*.example.com”

命令总结

生成go.mod文件
go mod init
#下载go.mod文件中指明的所有依赖
go mod download
#整理现有的依赖
go mod tidy
#查看现有的依赖结构
go mod graph
#编辑go.mod文件
go mod edit
#导出项目所有的依赖单vendor目录
go mod vendor
#校验一个模块是否被篡改过
go mod verify
#查看为什么需要依赖某模块
go mod why

创建项目

1.命令行创建
go mod init my-go
2.goland创建
image.png
3.下载依赖包
手动下载:go get github.com/aceld/zinx
自动下载:

4.下载包后,go.mod记录了当前module依赖的第三方包及版本号信息,indirect表示间接引用,因为我们引用的是zinx里的子包
image.png

5.下载包后生成go.sum,记录了依赖包整个文件的加密值,可以通过该值对依赖包的完整性进行校验,避免出现依赖被篡改的第三方包
image.png
h1:hash表示整体项目的zip包打开后全部文件的检验生成的hash,如果不存在表示该包可能用不上
xxx/go.mod h1:hash表示对go.mod文件做的hash

修改项目依赖包的关系

go mod edit -replace=zinx@v1.0.1=zinx@v1.0.2
go.mod文件就会被修改,项目依赖包的指向亦会被修改