Skip to content

Latest commit

 

History

History
111 lines (61 loc) · 6.04 KB

twelve-years-of-go.md

File metadata and controls

111 lines (61 loc) · 6.04 KB

Go诞生12年啦

前言

不知不觉,Go语言已经开源12年了。

日前,Go团队的Russ Cox在官方博客上发表了Go诞生12年的感想,回顾了2021年发布的Go 1.16版本和Go 1.17版本的改进,Go周边工具集的强大功能。展望2022年,Go 1.18版本会正式引入泛型,这也是Go团队2022年的主要工作聚集点。

本人针对Russ的原文做了一个翻译,以飨读者。

原文翻译

谷歌Go团队Russ Cox

2021.11.10

今天是我们庆祝Go语言开源12年的日子。今年我们做了相当多的工作,同时明年也有非常多值得期待的事情会发生。

大家看这篇博客可以感受到的最明显的变化就是我们对go.dev网站做了改版,力求把我们诸多分散的Go站点打造成一个风格一致的统一站点。同时,我们启用pkg.go.dev域名替换了godoc.org。

在今年2月,我们发布了Go 1.16版本。Go 1.16版本做了如下修改:

  1. 支持macOS ARM64处理器架构
  2. 增加了一个文件系统接口
  3. 增加了embeded包
  4. 默认开启modules
  5. 一些其它改进和优化

在今年8月,我们发布了Go 1.17版本。Go 1.17版本做了如下修改:

  1. 支持Windows ARM64处理器架构
  2. 优化TLS加密套件
  3. 引入修剪版本的module依赖图,使得大型项目中的module使用更加高效
  4. 新增可读性更强的编译限制语法
  5. 在底层实现上,针对x86-64体系架构的Go函数,Go 1.17使用了基于寄存器的调用约定。将CPU密集型的应用程序的性能提升了5%-15%。

2021年,我们发表了很多新的教程,包括"Go编程中数据库使用指引"、“Go modules开发指引”和“Go modules参考指引”等等。其中一个吸引较多人关注的教程是"如何使用Go和Gin框架开发Restful API",在Google Cloud Shell上可以通过交互操作进行体验。

同时,我们也一直忙于Go的IDE开发,包括如下几点:

  1. 在VS Code Go插件中默认启用gopls。
  2. 针对gopls和VS Code Go发布了数不清的改进和优化,包括Go调试器Delve带来的强大的调试功能和体验。

此外,我们启动了Go fuzzing的beta版本计划,并且官方提出了给Go语言增加泛型设计的想法。这2个部分预期都会在Go 1.18里发布。

秉持线上优先的原则,Go团队主持了第二届谷歌开源直播Go语言主题日。你们可以在YouTube上查看到以下分享。

  • "在Go中使用泛型"--- Ian Lance Taylor,介绍了泛型设计以及如何有效使用泛型。
  • "现代企业应用"--- Steve Francia,分享现代企业应用中Go扮演的角色。
  • "使用Go编辑器打造更好的项目"---Suzy Mueller,展示VS Code Go插件如何帮助你做代码导航、调试、测试以及其它更多的技巧。
  • "从概念到生产"---Benjamin Cane(美国运通杰出工程师),解释了美国运通如何使用Go来开发支付和奖励平台。

展望未来

我们非常期待Go语言发展的第13个年头里会给大家带来什么样的惊喜。下个月,我们会在GopherCon 2021会议上做以下2个分享,同时这个会议也邀请了Go社区里非常杰出的讲师。欢迎大家免费注册,设置日历提醒!

  • "为什么要使用Go泛型以及怎么样使用Go泛型"---Robert Griesemer和Ian Lance Taylor。他们领导了Go泛型的设计和实现。

    12.8 11:00 AM(美国东部时间)。

  • "使用调试适配协议(DAP)来调试Go代码"---Suzy Mueller,分享如何使用VS Code Go的高级调试功能。

    12.9 3:20 PM (美国东部时间)。

在明年2月,Go 1.18版本计划做如下更新:

  • 扩展新的基于寄存器的调用约定到非x86体系架构上,大幅提升Go的性能。
  • 支持新的Go Fuzzing功能。
  • 作为第一个支持泛型的正式发行版本。

泛型会是我们团队2022年的主要聚焦点之一。在Go 1.18里发布的泛型只是一个开始,我们需要花时间来使用泛型,研究我们的泛型设计里哪些是有用的,哪些是无用的。这样我们才能写出最佳编程实践,也才能决定我们应该把泛型里的哪些内容加到标准库和其它库里。我们预期Go 1.19(计划2022年8月发布)和之后的版本会进一步重新设计和实现泛型,并且把泛型进一步集成到Go的总体编程设计体验里。

2022年的另一个聚焦点是Go的供应链安全。我们已经讲了持续数年的Go依赖问题,Go modules虽然提供了可重复、可验证和经过验证的构建,在一定程度上解决了这个问题,但是仍然还有很多工作要做。从Go 1.18版本开始,go命令会嵌入更多的编译配置信息到二进制文件里,既可以让Go module的可重复性更容易实现,也可以帮助需要生成SBOM(Software Bill of Materials)的项目。此外,我们已经开始搭建Go漏洞数据库和用于报告Go程序依赖里的漏洞的工具。这项工作的目标之一就是大幅提升这类工具的信噪比:如果一个程序没有使用有漏洞的函数,那我们就不需要报告它。在2022年的规划里,我们计划把这个漏洞检测和报告工具打造成一个独立的工具,同时也把它引入到现有的工具和pgkg.go.dev网站上,包括glps和VS Code Go插件都会引入这个工具。当然,要提升Go供应链安全的其它方面,还有很多工作要做,请大家保持关注。

总体而言,我们期望2022年会是Go的一个大年,我们会继续发布及时的版本更新和大家所期望的功能改进。

谢谢大家

Go语言发展到现在不仅仅是靠Google的Go团队,还要感谢大家的帮助,让Go能够成功。也希望大家和我们一起,加入到Go语言的冒险历程里来。Go团队希望大家一切顺利!

References

附言

欢迎大家关注微信公众号:coding进阶。本公众号将持续分享以下内容:

  1. Go语言基础
  2. Go编程实战
  3. Go设计原理
  4. Go常见的坑
  5. Go版本迭代
  6. Go面试题集锦
  7. Go重要外文翻译
  8. 分布式系统架构

公众号二维码

一起进步!