Go Modules简明使用
Go Modules是从go1.11开始初步支持,到现在的1.16、1.17默认开启,是目前go项目的推荐包管理方式。接下来让我们看一下go modules的简单使用方法。
使用Go Modules
初始化
# go mod init [包路径]
go mod init github.com/overstarry/go-mod-example
执行上述命令会生成go.mod文件
module github.com/overstarry/kratos-demo
go 1.16
添加依赖
在当前项目的目录中执行go get命令,会添加相应的库到mod文件中
go get github.com/go-kratos/kratos/v2
这个命令会在mod文件里添加以下信息
require (
github.com/go-kratos/kratos/v2 v2.0.1
)
- 在 go get 的时候如果不手动指定版本信息,会自动拉取最新的版本的包
- 如果想要拉取指定版本可以通过 go get github.com/go-kratos/kratos/v2 v2.0.1 的方式,支持
- @版本号 例如
@v2.0.1
- @分支名 例如 @master
- @commit tag 例如 @6cff360233dc4457f1536e4f3df4e4e740fd3410
- // indirect 表示,我们在代码中没有直接应用这个包
- @版本号 例如
- 执行完 go get 命令之后还会在目录下生成一个 go.sum 文件
github.com/go-kratos/kratos/v2 v2.0.0-rc7 h1:Qvpz07BefgMFQycSDb57NlWhtYGz4me3wh8E1naI9/k=
github.com/go-kratos/kratos/v2 v2.0.0-rc7/go.mod h1:/2bGobqE+/F9kKOe4Re0OO5X2NWNGt+7n2e8Y5DHFRc=
github.com/go-kratos/kratos/v2 v2.0.1 h1:iFteVlcLWnAQu5n4I5bTN63svW+0YylGwhNTYO2MkOQ=
github.com/go-kratos/kratos/v2 v2.0.1/go.mod h1:Jz6fuJFF2SLczQ7Y8ocKieVGgstQKa+R9NX09bCHekU=
这个文件主要包含当前依赖的所有的包.
清理未使用的依赖
通过go mod tidy命令可以清理在项目中未使用的依赖包。
生成依赖文件夹
如果你的项目需要切换到新的开发环境,需要重新下载相关的依赖,这时如果你的网络不好或者其它情况,会大大影响你的开发。这时通过go mod vendor命令,可以将原本下载在你的GoPath中的go mod缓存至你的项目根目录下。 可以有效的避免一系列问题。
下载依赖至本地缓存
使用 go mod download将你的项目依赖下载到本地缓存,一般是存放在GoPath的pkg目录的mod目录下。
常见问题
上面介绍完基础的使用方法,接下来介绍一些Go Modules常见的问题。
拉取依赖很慢,有的包还拉取不到 Go 默认的 GOPROXY 配置是 proxy.golang.org , 默认国内无法访问,我们可以配置国内镜像,推荐 goproxy.cn 或者 goproxy.io
go env -w GOPROXY=https://goproxy.cn,direct
go1.16 之前 Go Module 并未默认开启还需要配置
go env -w GO111MODULE=on
公司私有仓库包如何获取 Go 获取包的时候默认会走 PROXY,这个只要你们的库没有对公网发布,那就获取不到,可以通过设置环境变量解决
go env -w GOPRIVATE=overstarry.gitlab.com/xxx
包的源代码仓库删库了怎么办?
这个其实在 Go Modules 上还好一些,因为 Go Modules 默认使用 Go Proxy 只要你使用的库的 LICENSE 和 GOPROXY 没有问题,一般都会有缓存
建议公司需要搭建一套自己的 GOPROXY 或者使用官方的 GOPROXY 或者是 goproxy.cn