Go 十一岁生日
Russ Cox, 来自 Go team
2020 年 11 月 10 日
今天我们将庆祝 Go 开源依赖的第十一个生日。我们在 Go 诞生 10 周年 举行的派对似乎是一个遥远的记忆。这是艰难的一年,但我们已砥砺前行并积累的不少东西。
11 月份,在 Go 的 10 岁生日后,我们推出了 go.dev 和 pkg.go.dev .
2 月份,Go 1.14 发布 第一次正式带来了 “生产就绪” 的 Go 模块化,以及许多的性能提升, 包括 更快的 defers 和 非合作抢占式 goroutine 来减少调度和垃圾收集延迟。
3 月初,我们推出一个 用于 protocol buffers 的新 API, google.golang.org/protobuf 这使对 protocol buffer 的反射和自定义消息的支持极大提高了.
当疫情袭来时,鉴于大家都身处于不同地域并且注意力应该放在更适合的地方,我们决定在春季暂停任何公告和发布。但我们的工作还在进行,我们的一名团队成员同时加入了 Apple/Google 的合作 privacy-preserving exposure notifications 来支持联系全世界. 5 月份,该组织推出了用 Go 写的 reference backend server.
我们将继续改进 gopls 以便启用在更多编辑器中的高级支持 Go-aware support. 6 月份,VSCode Go 官方扩展已加入 Go project 并且由同样的开发人员维护。
同样在 6 月,由于你们的反馈,我们把 pkg.go.dev 背后的代码也作为 Go 项目的一部分开源了。
6 月下旬,我们发布了最新的泛型设计草案,以及一个原型工具和泛型游戏场。
在 7 月,我们发布并讨论了三个新的设计草案,用于未来的修改。 用于文件选择的新 //go:build
行,文件系统接口,和构建时文件嵌入。(如下文所述,我们将在 2021 年看到所有这些内容)。
8 月,Go 1.15 版本主要提供了优化和错误修复,而不是新功能。最重要的是开始重写链接器,使其运行速度提高了 20%,并在大型构建中平均少用 30% 的内存。
上个月,我们进行了【年度 Go 用户调查】(《Go Blog 中文翻译》)。 一旦我们分析了结果,我们会在博客上公布。
Go 社区已经和大家一起适应了 "虚拟优先",今年我们看到了许多虚拟聚会和十多个虚拟 Go 会议。上周,Go 团队举办了 Google Open Source Live 的 Go 日(视频见链接)。
向前看#
我们也对 Go 的第 12 年的发展感到无比的兴奋。最直接的是,本周 Go 团队成员将在 GopherCon 2020 上发表八项活动。在你的日历上做个记号吧!
- 「输入 [通用] Go",Robert Griesemer 的演讲」。
11 月 11 日,上午 10:00(美国东部时间); 上午 10:30 的问答。 - 「What to Expect When You're NOT Expecting」,Go time 播客的现场录音,包括 Hana Kim 在内的专家调试员。
11 月 11 日 12:00 PM. - 「进化 Go 内存管理器的内存和 CPU 效率」,Michael Knyszek 的演讲。
11 月 11 日下午 1:00; 下午 1:50 的问答。 - 「实现更快的延迟」,Dan Scales 的演讲。
11 月 11 日下午 5:10; 下午 5:40 的问答。 - 「Go Team - Ask Me Anything」,由 Julie Qiu、Rebecca Stambler、Russ Cox、Sameer Ajmani 和 Van Riper 进行现场问答。
11 月 12 日下午 3:00。 - 「请原谅我的打断。Go 1.14 中的循环抢占」,Austin Clements 的演讲。
11 月 12 日下午 4:45; 下午 5:15 的问答。 - 「与错误打交道」,由 Jonathan Amsterdam 主讲。
11 月 13 日下午 1:00; 下午 1:50 的问答. - 「跨越围棋的鸿沟。200 万用户并在不断增长」,由 Carmen Andoh 演讲。
11 月 13 日下午 5:55。
Go 发布#
在 2 月份,Go 1.16 版本将包括新的文件系统接口和构建时文件嵌入。它将完成链接器的重写,带来额外的性能改进。它还将包括对新的苹果硅(GOARCH=arm64
)Mac 的支持。
8 月,Go 1.17 版本无疑将带来更多的功能和改进,尽管它还很遥远,确切的细节仍然是未知的。它将包括针对 x86-64 的新的基于寄存器的调用约定(不破坏现有的汇编!),这将使整个程序更快。(其他架构将在以后的版本中跟进。) 一个肯定会包括的好功能是新的 //go:build
行,它比当前的 //``+build
行更少出错。另一个备受期待的功能是支持 go test
命令中的模糊测试,我们希望明年可以进行 beta 测试。
Go 模块#
在接下来的一年里,我们将继续致力于开发对 Go 模块的支持,并将它们很好地整合到整个 Go 生态系统中。Go 1.16 将包括我们迄今为止最顺畅的 Go 模块体验。我们最近调查的一个初步结果是,96% 的用户现在已经采用了 Go 模块(一年前为 90%)。
我们也将最终结束对基于 GOPATH 的开发的支持:任何使用标准库以外的依赖的程序都需要一个 go.mod
。(如果你还没有切换到模块,请参阅 GOPATH wiki 页面,了解从 GOPATH 到模块的最后一步。)
从一开始,Go 模块的目标就是 「在 Go 开发者和我们的工具的工作词汇中加入软件包版本的概念」,以便在整个 Go 生态系统中实现对模块和版本的深度支持。Go 模块镜像、校验和数据库和索引就是通过这种生态系统范围内对软件包版本的理解而实现的。在接下来的一年里,我们将看到更多的工具和系统加入丰富的模块支持。例如,我们计划研究新的工具,以帮助模块作者发布新的版本("go release"),以及帮助模块消费者更新他们的代码,以便从废弃的 API 中迁移出来(一个新的 "go fix")。
作为一个更大的例子,我们创建了 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 betas 版本中。
Thank You!#
Go 远不止在 Google 的 Go team。我们,。除此之外,Go 之所有成功,是因为大家都在 Go 蓬勃发展的生态系统中工作并为之贡献。在 Go 之外的现实世界,这是艰难的一年。我们比以往任何时候都更感谢您能抽出时间来加入我们并帮助 Go 取得成功。Thank you. 祝一切安好。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: