位置导航: 福建食品网 > 电商推广

简洁的Go多版本管理机制

发布时间:2022-10-02 08:30   内容来源:IT之家   责任编辑:李陈默      阅读量:7690   

动态编程语言必须不断发展伴随着Go项目的不断发展,每个大版本都会有很多小版本的迭代对于Go的版本更新,应该如何做好多版本管理

多版本管理的重要性

以下是我们需要Go多版本管理的几个原因。

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

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

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

如何管理多个版本。

我们需要两个前提条件。

已经安装了某个版本的Go。

Git已安装。

固定

通过包装器,下载一个特定的Go版本及其对应的工具链。

$ goltversiongt下载

比如安装1.14.12版本,可以这样做。

使用

使用包装器go1.14.12,我们可以基于GO v1.14.12进行构建和测试。

$ go 1 . 14 . 12 modinithellogo:creating newgo . mod:module hello $ echo ' package main,导入fmt,funcmainfmtPrintln ' Hello . go $ go 1 . 14 . 12 build $

当然,如果你想让go v1.14.12喧宾夺主,成为go命令的代言人,你也可以这么做。

$ goversiongoversiongo 1.17 Darwin/64 $ exportGOROOT = $ $ export PATH = $ go root/bin:$ PATH $ goversiongoversiongo 1 . 14 . 12 Darwin/64

go1.14.12 env GOROOT路径是Go v1.14.12版本的内容所以,如果我们想卸载这个版本,只需删除路径文件夹,要阅读这个版本的源代码,只需查看这个路径下的src/content即可

获取最新的开发版本。

有一个特殊的版本标签:gotip,用来安装最新的开发版本。

可以看到目前拉的最新开发版本是go1.18—1afa432。

实现理念

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

选择任意一个版本进入,就会找到一个main.go文件。

main.go文件如下所示

所以我们后续通过go1.14.12包装器下载运行的逻辑在于内部/版本包中的run方法。

//Run运行 " Go " toolofteproviderversion . func runlog . set flags//获取Go安装目录根目录,err:=gorootiferr!= nillog.fatalf //执行goltversiongt逻辑iflen2 amp,amposargs " download " iferr:= install,呃!= nillog.fatalf OS . exit//确定本版本Go的安装状态if _,err:= OS . stat),呃!= nillog.fatalf ( "%s:未下载

由于篇幅原因,下载的安装并运行runGo函数逻辑本文就不讨论了,想了解更多的同学可以自行探究。

另外,为了让每个版本都有一个Go wrapper主程序,这里使用了一个帮助命令genv:可以快速生成相应版本的wrapper代码lt,versiongt/main.go .这里的实现见internal/genv/main.go代码。

摘要

介绍Go官方提供的多版本管理方案,包括使用,安装,卸载等,我们可以感受到它的简单和高效同时,我们简单地看了一下这组代码逻辑

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

郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。

热门品牌