发布者认证信息(营业执照和身份证)未完善,请登录后完善信息登录
 总算清楚简洁的 Go 多版本管理机制 - 最新消息 - 三农网
Hi,你好,欢迎来到三农网
  • 产品
  • 求购
  • 公司
  • 展会
  • 招商
  • 资讯
当前位置: 首页 » 资讯 » 新农村政策 找商家、找信息优选VIP,安全更可靠!
总算清楚简洁的 Go 多版本管理机制 - 最新消息
发布日期:2023-05-09 02:15:57  浏览次数:13

一门充满生机的编程语言,一定是不断进化向前的。随着 Go 项目的持续发展,而且每个大版本内还会有不少小版本的迭代。对于 Go 的版本更新,我们该如何做好多版本管理。

多版本管理的重要性

这里简单列举几个我们需要 Go 多版本管理的理由。

稳定性考量:虽然 Go1 一直在良好地遵守向后兼容准则,但通常基于稳定性考虑,我们并不会直接升级到最新版本。

多项目开发:各项目依赖的 Go 版本不一致。

版本兼容:测试代码前后兼容性,或者确保 bug 修复在不同 Go 版本的正确性,对于开源项目,保证版本兼容性非常重要。

如何多版本管理

我们需要有两个先决条件

已经安装好了某版本的 Go

安装好了 git

安装

运行 go install / dl / go<version> 命令将下载特定 Go 版本的包装器。

$ go install /dl/go<version>@latest

通过包装器,下载特定 Go 版本和它对应的工具链。

$ go<version> download

例如安装 版本,可以这样执行。

$ go install /dl/@latest $  download

使用

使用包装器 ,我们可以基于 Go 进行构建和测试。

$  mod init hello go: creating new : module hello $ echo 'package main; import "fmt"; func main() { ("Hello, World") }'   $  build $ ./hello Hello, World

当然,如果你想让 Go ”喧宾夺主“,成为 go 命令的代言人,可以这样做。

$ go version go version  darwin/64 $ export GOROOT=$( env GOROOT) $ export PATH=${GOROOT}/bin:$PATH $ go version go version  darwin/64

这个 env GOROOT 路径就是 Go 版本的内容。所以,如果我们想卸载这个版本,直接将该路径文件夹删除即可;想阅读该版本源码,直接查看该路径下的 src / 内容即可 。

获取最新开发版本

有一个特别的版本标记:gotip,它用于安装最新的开发版本。

$ go install /dl/gotip@latest $ gotip download

可以看到,当前拉取到的最新的开发版本是 -1afa432。

实现思路

实现多版本下载安装的秘诀就在于 / dl 这个仓库,/ golang / dl 是它的镜像库。

查看仓库代码,我们能看到一系列版本目录

随意选择一个版本进入,会发现存在一个 文件

而 文件内容如下

我们通过 go install / dl / @latest 下载的 包装器就是这个 编译而成。

因此,我们后续通过 包装器下载和运行的逻辑就在于 internal / version 包中的 Run 方法了。

// Run runs the "go" tool of the provided Go version. func Run(version string) {  (0)   // 获取 Go 安装目录  root, err := goroot(version)  if err != nil {   ("%s: %v", version, err)  }      // 执行 go<version> download 命令时逻辑  if len() == 2 && [1] == "download" {   if err := install(root, version); err != nil {    ("%s: download failed: %v", version, err)   }   (0)  }      // 判断该版本 Go 安装状态  if _, err := ((root, unpackedOkay)); err != nil {   ("%s: not downloaded. Run '%s download' to install to %v", version, version, root)  }   // 运行该版本 Go  runGo(root) }

鉴于篇幅原因,下载的 install 和运行的 runGo 函数逻辑本文就不再展开了,想深入了解的同学可以自行探索。

另外,为了让每个版本都有一个 Go 包装器主程序(避免重复的手工操作),这里使用了一个帮助命令 genv:可以快速生成对应版本的包装器代码 <version>/。这里的实现见 internal / genv / 代码。

总结

本文介绍了 Go 官方提供的多版本管理方案,包括使用、安装、卸载等,可以感受到它的简洁与高效。同时我们简单查看了这一套实现代码逻辑。

最后,希望本文内容能够助你用好 Go 多版本管理。

本文来自微信公众号:Golang 技术分享 (ID:GolangShare),作者:机器铃砍菜刀

VIP企业最新发布
全站最新发布
最新VIP企业
背景开启

三农网是一个开放的平台,信息全部为用户自行注册发布!并不代表本网赞同其观点或证实其内容的真实性,需用户自行承担信息的真实性,图片及其他资源的版权责任! 本站不承担此类作品侵权行为的直接责任及连带责任。

如若本网有任何内容侵犯您的权益,请联系 QQ: 1130861724

网站首页 | 实时热点 | 侵权删除 | 付款方式 | 联系方式 | 法律责任 | 网站地图 ©2022 zxb2b.com 三农网,中国大型农产品交易电商平台 鄂公网安备42018502006996 SITEMAPS | 鄂ICP备14015623号-20

返回顶部