go module是go1.11之后,官方推荐的包管理工具,将会在1.13发布之后,成为默认的包管理工具。
开启go module
首先要将GO111MODULE设置为on
// 打开配置文件
vim ~/.bash_profile
// 导出GO111MODULE=on
export GO111MODULE=on
// 众所周知的原因,挂个代理
export GOPROXY=https://goproxy.io
// 执行配置文件
source ~/.bash_profile
既有项目
cd gin-blog
//在这个文件夹下创建一个空的go.mod
go mod init
//查找依赖,并记录在go.mod文件中
go get ./...
简单的两行命令,即可完成老项目向go module转变。
进过上面两步之后,会发现项目根目录下多了两个文件,go.mod go.sum
go.mod
// 表明归属的项目
module gin-blog
// go的版本
go 1.12
// 依赖的包
require (
github.com/Unknwon/com v0.0.0-20190321035513-0fed4efef755
github.com/astaxie/beego v1.12.0
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/gin-gonic/gin v1.4.0
github.com/go-ini/ini v1.44.0
github.com/jinzhu/gorm v1.9.10
)
go.sum
//记录每个依赖库的版本和哈希值
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/OwnLocal/goes v1.0.0/go.mod h1:8rIFjBGTue3lCU0wplczcUgt9Gxgrkkrw7etMIcn8TM=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
...
新建的项目
得益于新的go module,可以用在go path下的src新建目录:
cd desktop
mkdir go-module-test
cd go-module-test
// 一定要在init后指定项目名称 否在会报错:
//go: cannot determine module path for source directory /Users/ray/desktop/go-module-test (outside GOPATH, no import comments)
go mod init go-module-test
之后需要下载新的包,可以使用go mod download 下载所有的依赖,但是依赖并不是下载到GOPATH中,而是GOPATH/pkg/mod
go mod 命令
go mod init 初始化当前文件夹, 创建go.mod文件
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod tidy 增加缺少的module,删除无用的module
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖
go get
在项目中执行go get命令可以下载依赖包,并且还可以指定下载的版本。
- 运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
- 运行go get -u=patch将会升级到最新的修订版本
- 运行go get package@version将会升级到指定的版本号version
go mod tidy
我们在代码中删除依赖代码后,相关的依赖库并不会在go.mod文件中自动移除。这种情况下我们可以使用go mod tidy命令更新go.mod中的依赖关系。