:::info 日期:2020 年 11 月 10 日
作者:Russ Cox, for the Go team
原文链接:https://go.dev/blog/11years :::

今天,我们庆祝 Go 开源版本的 11 岁生日。 我们为 Go 10 岁那年举办的派对似乎已成为遥远的记忆。 这是艰难的一年,但我们一直在推动 Go 的发展,并积累了很多亮点。

11 月,在 Go 10 岁生日后不久,我们推出了 go.dev 和 pkg.go.dev

2 月,Go 1.14 版本发布了 Go 模块的第一个正式“生产就绪”实现,以及许多性能改进,包括更快的延迟非合作 goroutine 抢占,以减少调度和垃圾收集延迟。

3 月初,我们推出了新的协议缓冲区 APIgoogle.golang.org/protobuf,大大改进了对协议缓冲区反射和自定义消息的支持。
Screen Shot 2021-09-19 at 11.52.31 PM.png
当大流行来袭时,我们决定在春季暂停任何公开公告或发布,认识到每个人的注意力都应该放在别处。 但我们一直在努力,我们的一名团队成员加入了 Apple/Google 在隐私保护暴露通知方面的合作,以支持全世界的联系人追踪工作。 5 月,该小组推出了用 Go 编写的参考后端服务器

我们继续改进 gopls,这在许多编辑器中实现了高级 Go-aware 支持。 6 月,VSCode Go 扩展正式加入 Go 项目,现在由从事 gopls 的相同开发人员维护。

同样在 6 月,感谢您的反馈,我们也将 pkg.go.dev 背后的代码作为 Go 项目的一部分开源。

6 月下旬,我们发布了最新的泛型设计草案,以及原型工具和泛型游乐场

7 月,我们发布并讨论了三个用于未来更改的新设计草案:用于文件选择的 new //go:build lines文件系统接口和构建时文件嵌入。 (我们将在 2021 年看到所有这些,如下所述。)

8 月,Go 1.15 版本主要提供了优化和错误修复,而不是新功能。 最重要的是开始重写链接器,使其运行速度提高 20%,大型构建平均使用的内存减少 30%。

上个月,我们进行了年度 Go 用户调查。 一旦我们分析了结果,我们将在博客上发布结果。

Go 社区已经和其他人一起适应了“虚拟优先”,今年我们看到了许多虚拟聚会和十多个虚拟 Go 会议。 上周,Go 团队在 Google Open Source Live 上举办了 Go day(视频在链接中)。

向前

我们也对 Go 的第 12 年即将到来的事情感到非常兴奋。 最直接的是,本周 Go 团队成员将在 GopherCon 2020 上展示八项活动。标记您的日历!

  • “Go [泛型] ”,罗伯特·格里瑟默 (Robert Griesemer) 的演讲,

Nov 11, 10:00 AM (US Eastern); Q&A at 10:30 AM

  • “当您不期望时会发生什么”,Go time 播客的现场录音,由一组专家调试器组成,包括 Hana Kim,

Nov 11 12:00 PM

  • “提高 Go 内存管理器的 RAM 和 CPU 效率”,Michael Knyszek 的演讲,

Nov 11 1:00 PM; Q&A at 1:50 PM

  • “实施更快的延迟”,Dan Scales 的演讲,

Nov 11 5:10 PM; Q&A at 5:40 PM

  • “Go Team - Ask Me Anything”,与 Julie Qiu、Rebecca Stambler、Russ Cox、Sameer Ajmani 和 Van Riper 的现场问答,

Nov 12 3:00 PM

  • “请原谅中断:Go 1.14 中的循环抢占”,Austin Clements 的演讲,

Nov 12 4:45 PM; Q&A at 5:15 PM

  • “与错误一起工作”,乔纳森·阿姆斯特丹的演讲,

Nov 13 1:00 PM; Q&A at 1:50 PM

  • “Go 跨越鸿沟:200 万用户和增长”,Carmen Andoh 的演讲,

Nov 13 5:55 PM

Go 发布

2 月份,Go 1.16 版本将包括新的文件系统接口构建时文件嵌入。 它将完成链接器重写,带来额外的性能改进。 它将包括对新 Apple Silicon (GOARCH=arm64) Mac 的支持。

8 月,Go 1.17 版本无疑将带来更多功能和改进,尽管确切的细节仍然悬而未决。 它将包括一个新的基于寄存器的 x86-64 调用约定(不破坏现有程序集!),这将使程序全面更快。 (其他架构将在以后的版本中跟进。)肯定会包含的一个很好的功能是 new //go:build lines,它比 current // +build lines 更不容易出错。 我们希望明年可以进行 beta 测试的另一个备受期待的功能是支持 go test 命令中的模糊测试

Go 模块

在接下来的一年里,我们将继续致力于开发对 Go 模块的支持,并将它们很好地集成到整个 Go 生态系统中。 Go 1.16 将包含我们迄今为止最流畅的 Go 模块体验。 我们最近调查的一个初步结果是,现在 96% 的用户采用了 Go 模块(高于一年前的 90%)。

我们还将最终停止对基于 GOPATH 的开发的支持:任何使用标准库以外的依赖项的程序都需要一个 go.mod。 (如果您还没有切换到模块,请参阅 GOPATH wiki 页面,了解有关从 GOPATH 到模块旅程的最后一步的详细信息。)

从一开始,Go 模块的目标就是“将包版本的概念添加到 Go 开发人员和我们的工具的工作词汇表中”,以便为整个 Go 生态系统中的模块和版本提供深度支持。 Go 模块镜像、校验和数据库和索引是通过对包版本是什么的这种生态系统范围内的理解而成为可能的。 在接下来的一年里,我们将看到更多的工具和系统添加了丰富的模块支持。 例如,我们计划研究新工具以帮助模块作者发布新版本(go 发布)以及帮助模块使用者更新他们的代码以从弃用的 API 迁移(新的 go 修复)。

作为一个更大的例子,我们创建了 gopls 来减少编辑器用于支持 Go 的许多工具,这些工具都不支持模块,减少到一个支持模块。 在接下来的一年里,我们将准备好让 VSCode Go 扩展默认使用 gopls,以获得开箱即用的出色模块体验,我们将发布 gopls 1.0。 当然,gopls 最好的事情之一是它是编辑器中立的:任何理解语言服务器协议的编辑器都可以使用它。

版本信息的另一个重要用途是跟踪构建中的任何包是否存在已知漏洞。 在接下来的一年里,我们计划开发一个已知漏洞的数据库以及用于根据该数据库检查您的程序的工具。

Go 包发现站点 pkg.go.dev 是 Go 模块启用的版本感知系统的另一个示例。 我们一直专注于获得正确的核心功能和用户体验,包括今天推出的重新设计。 在接下来的一年里,我们将把 godoc.org 统一为 pkg.go.dev。 我们还将扩展每个包的版本时间表,显示每个版本的重要更改、已知漏洞等,遵循总体目标,即您需要做出有关添加依赖项的明智决策

我们很高兴看到从 GOPATH 到 Go 模块的这段旅程即将完成,以及 Go 模块支持的所有优秀的依赖感知工具。

泛型

每个人脑海中的下一个特性当然是泛型。 正如我们上面提到的,我们在 6 月份发布了泛型的最新设计草案。 从那以后,我们继续改进粗糙的边缘,并将注意力转移到实现生产就绪版本的细节上。 我们将在 2021 年全年致力于此,目标是在年底前让人们尝试一些东西,也许是 Go 1.18 测试版的一部分。

十分感谢

Go 不仅仅是 Google Go 团队中的我们。 我们感谢与我们一起使用 Go 版本和工具的贡献者。 除此之外,Go 之所以成功,是因为你们所有人都在为 Go 蓬勃发展的生态系统工作并做出贡献。 对于 Go 之外的世界来说,这是艰难的一年。 我们比以往任何时候都更感谢您抽出时间加入我们并帮助 Go 取得如此成功。 谢谢你。 我们希望你们都保持安全,并祝你们一切顺利。