Go Module构建模式如何对依赖包进行升级和降级 文章 2021-10-27 14:23:02 +0800 CST 阅读:6386 评论数:0 [TOCM] [TOC] ## 什么情况下要对依赖包进行升级或者降级操作 虽然`go tidy` 可以自动帮我们确定依赖的版本,但是有时候如果有特殊的要求,比如某一个版本的引入可能导致程序复杂程度提高、稳定性降低、或者其他问题,我们需要一个特定的版本,就需要对这个依赖包进行升级或者降级操作。 ## 管理依赖是什么原理 查了一下资料,go 到现在的`go module` 构建模式经历2个比较大演化,最早的 `go path` 模式,之后的`vender`模式,再到现在的go module 模式,`go module` 模式引用的是一种“语义导入版本”机制,也就是说,通过语义规范即vX.Y.Z的格式,来进行版本兼容和控制。 也就是说我们找到对应的版本号,再使用 `go get`下载指定的版本就可以了。 ## 如何进行版本升级和降级 ### 通过 `go list -m -versions`查询依赖包的相关版本 我们使用 `github.com/gin-gonic/gin` 来作一个demo,查看版本 ```go go list -m -versions github.com/gin-gonic/gin ``` 输出 ``` github.com/gin-gonic/gin v1.1.1 v1.1.2 v1.1.3 v1.1.4 v1.3.0 v1.4.0 v1.5.0 v1.6.0 v1.6.1 v1.6.2 v1.6.3 v1.7.0 v1.7.1 v1.7.2 v1.7.3 v1.7.4 ``` ### 查看当前包使用的版本 ``` go list -m github.com/gin-gonic/gin ``` 显示为: ``` github.com/gin-gonic/gin v1.7.3 ``` ### 说明现在我们使用的是v1.7.3版本,此时我们想要使用最新的v1.7.4该如何做呢?有2种方法。 #### 执行带有版本号的 go get 命令: ``` go get github.com/gin-gonic/gin@v1.7.4 ``` 输出: ``` go get: upgraded github.com/gin-gonic/gin v1.7.3 => v1.7.4 ``` 此时再看使用的版本: ``` go list -m github.com/gin-gonic/gin //输出 github.com/gin-gonic/gin v1.7.4 ``` 说明已经升级了,降级也一样操作即可,当然也可以使用`go tidy`来进行依赖包的升降级操作。 #### 使用`go mod tidy`来帮助我们降级 首先使用 `go mod edit `来修改版本 ``` go mod edit -require=github.com/gin-gonic/gin@v1.7.3 ``` 然后再使用 ``` go mod tidy ``` 最后我们再看当前依赖包使用的版本 ``` go list -m github.com/gin-gonic/gin ``` 输出 ``` github.com/gin-gonic/gin v1.7.3 ``` 说明使用的`gin`包的版本为`v1.7.3`,降级成功了。 ## 总结 使用 go module 构建模式,对依赖包可以进行非常方便的管理,Go 核心团队已经考虑在后续版本中彻底移除 GOPATH 构建模式,Go Module 构建模式将成为 Go 语言唯一的标准构建模式,所以建议在新项目中都使用该模式。