go module使用
go module介绍
go module是go官⽅⾃带的go依赖管理库,在1.13版本正式推荐使⽤
go module可以将某个项⽬(⽂件夹)下的所有依赖整理成⼀个 go.mod ⽂件,⾥⾯写⼊了依赖的版本等
使⽤ go module之后我们可不⽤将代码放置在src下了
使⽤ go module 管理依赖后会在项⽬根⽬录下⽣成两个⽂件 go.mod 和 go.sum。
开启go module
(1) go 版本 >= v1.11
(2) 设置GO111MODULE环境变量
要使⽤go module ⾸先要设置GO111MODULE=on,GO111MODULE 有三个值,off、on、auto,off 和
on 即关闭和开启,auto 则会根据当前⽬录下是否有 go.mod ⽂件来判断是否使⽤ modules 功能。⽆论
使⽤哪种模式,module 功能默认不在 GOPATH ⽬录下查找依赖⽂件,所以使⽤ modules 功能时请设置
好代理。
在使⽤ go module 时,将 GO111MODULE 全局环境变量设置为 off,在需要使⽤的时候再开启,避免在
已有项⽬中意外引⼊ go module。
export GO111MODULE=on
GO PROXY
go module 的⽬的是依赖管理,所以使⽤ go module 时你可以舍弃 go get 命令(但是不是禁⽌使⽤, 如果要指定包的版本或更新包可使⽤go get,平时没有必要使⽤)因go的⽹络问题, 所以推荐使⽤ goproxy.cn设置
1 // 阿⾥云镜像
2 GOPROXY=https://mirrors.aliyun.com/goproxy/
3 // 中国golang镜像
4 GOPROXY=https://goproxy.io
5 // 七⽜云为中国的gopher提供了⼀个免费合法的代理goproxy.cn,其已经开源。只需⼀条简单命令就可以使⽤该代理:
6 go env -w GOPROXY=https://goproxy.cn,direct
初始化
为你的项⽬第⼀次使⽤ GO MODULE(项⽬中还没有go.mod⽂件)进⼊你的项⽬⽂件夹
cd xxx/xxx/test/
初始化 MODULE
go mod init test(test为项⽬名)
我们会发现在项⽬根⽬录会出现⼀个 go.mod ⽂件
注意,此时的 go.mod ⽂件只标识了项⽬名和go的版本,这是正常的,因为只是初始化了
检测依赖
go mod tidy
tidy会检测该⽂件夹⽬录下所有引⼊的依赖,写⼊ go.mod ⽂件写⼊后你会发现 go.mod ⽂件有所变动
go.sum记录每个依赖库的版本和哈希值,⽂件格式如下所示:
此时依赖还是没有下载的
下载依赖
我们需要将依赖下载⾄本地,⽽不是使⽤ go get
go mod download
如果你没有设置 GOPROXY 为国内镜像,这步百分百会卡到死此时会将依赖全部下载⾄ GOPATH 下,会在根⽬录下⽣成 go.sum ⽂件, 该⽂件是依赖的详细依赖, 但是我们开头说了,我们的项⽬是没有放到 GOPATH 下的,那么我们下载⾄ GOPATH 下是⽆⽤的,照样找不到这些包
导⼊依赖
go mod vendor
执⾏此命令,会将刚才下载⾄ GOPATH 下的依赖转移⾄该项⽬根⽬录下的 vendor(⾃动新建) ⽂件夹下, 此时我们就可以使⽤这些依赖了
新增依赖
不使⽤ go get ,我怎么在项⽬中加新包呢?
直接项⽬中 import 这个包,之后更新依赖即可
在协作中使⽤ GO MODULE
要注意的是, 在项⽬管理中,如使⽤git,请将 vendor ⽂件夹放⼊⽩名单,不然项⽬中带上包体积会很⼤
git设置⽩名单⽅式为在git托管的项⽬根⽬录新建 .gitignore ⽂件设置忽略即可.
但是 go.mod 和 go.sum 不要忽略另⼀⼈clone项⽬后在本地进⾏依赖更新(同上⽅依赖更新)即可
GOMODULE常⽤命令
go mod init # 初始化
go mod tidy # 更新依赖⽂件
go mod download # 下载依赖⽂件
go mod vendor # 将依赖转移⾄本地的vendor⽂件
go mod edit # ⼿动修改依赖⽂件
go mod graph # 打印依赖图
go mod verify # 校验依赖