系统环境
Mac + go1.12 + goland2019
简介
 Go Module是Golang在1.11版本中推出的包管理机制。Golang以前一直缺少一个官方的包依赖管理工具,导致项目的依赖包无法进行有效管理
- 根据GOPATH查找包,同一个依赖包可能供多个项目使用,很难进行独立升级
- 开发人员不知道项目所有的依赖包信息,包的版本号信息等
使用
开启go mod
go mod 可以通过GO111MODULE来控制是否启用,GO111MODULE有一下三种类型。
- on 所有的构建,都使用Module机制
- off 所有的构建,都不使用Module机制,而是使用GOPATH和Vendor
- auto 在GOPATH下的工程,不使用Module机制,不在GOPATH下的工程使用
根据情况执行命令:export GO111MODULE=on/off/auto
初始化go mod
- 新建项目 - 项目结构如下图所示
- main文件import books和httplib
   
- 在src目录下执行:go mod init 项目名称   - 自动生成go.mod文件,go.mod文件里面没有核心信息
 
- src目录下执行命令:go build main.go  - 报错cannot load books: cannot find module providing package books,处理方案:在import的位置添加项目名称,重新执行go build main.go 
- httplib会下载到GOPATH/pkg/mod下,GOPATH如果有多个,则在第一个目录下
     - go.mod里会有依赖包的信息  
- 至此,对于一个项目的go mod化就已经完成了 
 
- 报错cannot load books: cannot find module providing package books,处理方案:在import的位置添加项目名称,重新执行go build main.go
- goland中,main.go里的”asap/books”为红色,解决方案为 - 如果Goland->perferences没有Go Modules,则需要下载最新版的goland 
- 在Goland->perferences配置go mod   
 
命令
- go help mod查看mod命令的帮助
- go mod init初始化模块,目录下生成- go.mod
- go mod tidy根据- go.mod文件来处理依赖关系,从- go.mod删除不需要的依赖、新增需要的依赖,这个操作不会改变依赖版本
- go list -m all显示依赖文件
- go mod download下载依赖(path是包的路径,version是包的版本),根据go.mod文件下载对应的依赖项到GOPATH/pkg/mod路径下
- go mod vendor复制所有依赖到模块下的vendor目录
- go mod graph输出模块所需的依赖表
- go mod verify验证模块的完整性
- go mod edit -fmt格式化- go.mod文件。
- go mod edit -require=path@version添加依赖或修改依赖版本,这里支持模糊匹配版本号,详情可以看下文- go get的用法。()
- go mod edit -replace=path1@version=path2@version使用path2路径的包来代替path1路径的包。- 对于国内用户来说,手动维护这个文件是必然的,因为你需要把 - golang.org/x/text替换成- github.com/golang/text。示例- go mod edit -replace=golang.org/x/sys@v0.0.0-20180830151530-49385e6e1522=github.com/golang/sys@v0.0.0-20180830151530-49385e6e1522
