关于新版本的话题,我意识到知道一种方法来确定什么是最新的稳定的Go版本也是一件好事。知道可用的Go版本的具体用例是确定何时升级到新版本,或者何时知道使用的版本不再被支持。
通过快速搜索,我没能马上找到知道这一点的方法,我最初的想法是以RSS feed或类似的形式从官方下载页面获得这些信息,但当时并没有这个方法。
幸好有gophers-slack的存在,我在*#general*中询问,社区与我分享了几种不同的方式来获得这些信息。
TIL(感谢Gophers Slack社区) 4种了解当前/可用Go版本的方法(以编程方式对其做出反应):
*t.co/BVwvL9bPAb
*t.co/FtEkt0oYrH
*t.co/26NVYGaSdj
* t.co/uFVib44IVh#…- Mario Carrion (@mariocarrion)2020年5月30日
使用 golang.org/VERSION
访问 https://golang.org/VERSION将最新的稳定的Go版本以HTML格式呈现,在该页面上有另一个链接可以获得类似的文本格式的结果。 https://golang.org/VERSION?m=text.
使用golang.org/dl
大家都知道 https://golang.org/dl/,官方的围棋下载页面,但你知道还有另一种方法来呈现这些结果吗?使用 https://golang.org/dl/?mode=json.这个端点渲染了一个JSON响应,在默认情况下,它为我们提供了更多细节。
- 两个最新的和稳定的版本,以及
- 所有不同的编译器下载方式的链接,按平台和文件类型分类。
但不仅如此!golang.org/x/website/internal/dl 的官方文档还支持另一个查询参数以返回更多的结果。 https://golang.org/dl/?mode=json&include=all,这将返回一个包括可用下载的完整列表的响应,包括稳定的、不稳定的和存档的版本。相当不错。
使用github的atom feed
我一开始并没有想到这个选项,但考虑到Go项目也在使用Github,它绝对有很大的意义。有一种方法可以订阅Atom feeds的标签(https://github.com/golang/go/tags.atom)和发行版(https://github.com/golang/go/releases.atom).
这个选项有点类似于之前的长篇大论https://golang.org/dl/?mode=json&include=all ,它肯定是有用的,但它需要解析Atom格式的实际结果。
总结
我打赌还有更多的方法可以获得可用的Go版本,比如这个使用gRPC的版本,但我认为这里的方法是使用半官方的长格式版本(https://golang.org/dl/?mode=json&include=all)来实现这个新功能,它包括更多的细节,而且是JSON格式,所以使用net/http 和encoding/json 的组合应该足够了。