go下载安装指定版本的包
背景
跑集成测试的时候,需要在机器上拉取一个依赖库github.com/onsi/gomega, 之前一直用go get github.com/onsi/gomega/...来拉取安装,没有问题,
直到有次报错"src/github.com/onsi/gomega/matchers/match_error_matcher.go:28:52: undefined: errors.Is"。
分析原因可以知道这个go get 每次默认是拉取最新的包去编译安装,刚好这个包几天前有更新,更新后的版本有问题,导致编译不过,所以稳妥起见,还是一直指定拉取一个稳定的版本比较靠谱。
我们的项目里没有使用 go mod, 于是借助于go get 和 go install 来实现,中间通过git checkout来切换到指定版本
实现方式
以github.com/onsi/gomega这个包为例
- go get -d -v github.com/onsi/gomega/...
只是拉取纯拉取该包,-d代表只拉取,不编译安装; -v表示显示详情; 包路径最后的...表示拉取该包的子包(依赖) - git checkout v1.10.4
切换到需要的稳定版本 - go install -a -v github.com/onsi/gomega/...
编译安装,-a 代表强制编译安装(即使已经存在最新的安装包)