什么是 Go Modules
Go 1.11 和 Go 1.12 包含了初步的 Go Modules 支持,且计划在 2019 年 8 月发布的 Go 1.13 会在所有开发过程中默认使用 Go Modules。
Go Modules 是为了提升使用其他开发者代码,即添加**依赖项(模块、包)**时的体验,也是为了让代码的正确性、安全性得到保障。并且 Go Modules 可以使用 GOPROXY 环境变量来解决中国大陆无法使用 go get 的问题。
Go Modules 在 Go 1.11 及 Go 1.12 中有三个模式,根据环境变量 GO111MODULE 定义:
-
默认模式(未设置该环境变量或 GO111MODULE=auto):Go 命令行工具在同时满足以下两个条件时使用 Go Modules:
当前目录不在 GOPATH/src/ 下;
在当前目录或上层目录中存在 go.mod 文件。 -
GOPATH 模式(GO111MODULE=off):Go 命令行工具从不使用 Go Modules。相反,它查找 vendor 目录和 GOPATH 以查找依赖项。
-
Go Modules 模式(GO111MODULE=on):Go 命令行工具只使用 Go Modules,从不咨询 GOPATH。GOPATH 不再作为导入目录,但它仍然存储下载的依赖项(GOPATH/pkg/mod/)和已安装的命令(GOPATH/bin/),只移除了 GOPATH/src/。
Go 1.13 默认使用 Go Modules 模式,所以以上内容在 Go 1.13 发布并在生产环境中使用后都可以忽略。
总结:意思 就是 新版本默认使用Go Modules 模式, src 源码路径可以放置到任何地方,不受限于GOPATH目录。
与 GoLand 集成
Go mod 使用记录
初始化项目
使用 go mod init 初始化一个 go.mod 文件
go mod init
找到项目依赖(整理依赖包)
使用 go mod tidy 找到项目依赖,并写入到 go.mod
go mod tidy
如果想缓存到vendor目录
go mod vendor
更新已有包版本
如果我们想要更新一个已在 go.mod 文件列出的包,可以使用 go get -u PKG_PATH
如,要更新 github.com/gookit/filter 到最新版本:
go get -u github.com/gookit/filter