系统环境
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化就已经完成了
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