Go,11 岁了!

GoCN

共 3928字,需浏览 8分钟

 · 2020-11-13

今天,我们一起庆祝 Go 语言正式开业发布 11 周年。去年的“Go turning 10”周年庆典聚会似乎已成为久远的回忆。这是艰难的一年,但我们一直保持了 Go 开发的步伐,并积累了很多亮点。


在去年 11 月,我们在庆祝Go 10 周年后不久就发布和上线了go.dev 和 pkg.go.dev站点。

今年 2 月,Go 1.14 版本提供了第一个正式的 “生产就绪” 的 go module 实现,并进行了许多性能改进,包括更快的 defer和真正抢占式的 goroutine 调度,以减少调度和垃圾收集延迟。

在今年三月初,我们推出了新版 protobuf API:google.golang.org/protobuf,大幅改善了对 protobuf reflection 和自定义消息的支持。

当新冠疫情大流行发生时,我们决定在春季暂停所有公开发布或活动,因为大家都知道所有人的注意力都聚焦在其他地方。但是我们一直在努力,我们的团队中的一个成员加入了 Apple/Google 发起的“privacy-preserving exposure notifications”项目,以支持全球范围内的联系人追踪工作。5 月,该小组启动了用 Go 编写的 reference backend server。

我们继续改进gopls,这让许多编辑器受益并都启用了高级 Go-aware 支持。六月份,VSCode Go 扩展正式加入 Go 项目,现在由从事 gopls 的同一位开发人员维护。

同样在 6 月,由于 Go 社区的反馈意见,我们还将 pkg.go.dev 背后的代码开源,并将其作为 Go 项目的一部分。

6 月下旬,我们 发布了有关 Go generics 的最新设计草案,以及原型工具和一个支持 go generics 实验语法的 playground。

7 月,我们发布并讨论了三个新的有关 Go 未来演化的设计草案:go:build、文件系统接口和构建时文件嵌入。(我们将在 2021 年看到所有新特性)

8 月,Go 1.15 版本发布!该版本以优化和 bug 修复为主,没有提供太多新功能。其最重要的部分是开始重写链接器,这使它在进行大型项目构建时,平均运行速度提高了 20%,平均使用的内存减少了 30%。

上个月,我们发起了年度 Go 用户调查。分析结果后,我们会将结果发布到博客上。

Go 社区已经与其他所有人一起适应了 “虚拟优先” 的原则,今年我们看到了许多虚拟聚会和十多个虚拟 Go 会议。上周,Go 团队在 Google Open Source Live 中举办了 “Go Day” 活动。

前进

我们也对 Go 语言在其第 12 年即将发生的事情感到非常兴奋。近期,Go 团队成员将参加GopherCon 2020并做以下展示和分享。请打开您的日历,做好提醒标记!

  • 11 月 11 日上午 10:00,Robert Griesemer 的演讲 “Typing [Generic] Go”;在 10:30 AM 进行 Q&A。

  • 11 月 11 日中午 12:00,现场播放 Go 时间播客的实况录像:“What to Expect When You’re NOT Expecting”,该集播客由包括 Hana Kim 组成的专家调试小组主持。

  • Michael Knyszek 在 11 月 11 日下午 1:00 发表演讲 “Evolving the Go Memory Manager's RAM and CPU Efficiency” ;在下午 1:50 进行 Q&A。

  • Dan Scales 在 11 月 11 日下午 5:10 发表演讲 “Implementing Faster Defers”;在下午 5:40 进行 Q&A。

  • 11 月 12 日下午 3 点,与朱莉·邱(Julie Qiu),丽贝卡·史翠宝(Rebecca Stambler),拉斯·考克斯(Russ Cox),萨默·阿杰曼尼(Sameer Ajmani)和范·里珀(Van Riper)一起的现场问答环节 “ Go Team-Ask Me Anything” 。

  • 奥斯汀·克莱门茨(Austin Clements)在 11 月 12 日下午 4:45 发表演讲 “Pardon the Interruption: Loop Preemption in Go 1.14” ;在下午 5:15 进行 Q&A。

  • 乔纳森·阿姆斯特丹(Jonathan Amsterdam)在 11 月 13 日下午 1:00 发表的演讲:“Working with Errors” ;在下午 1:50 进行 Q&A。

  • 卡门·安多(Carmen Andoh)11 月 13 日下午 5:55 发表的演讲 “Crossing the Chasm for Go: Two Million Users and Growing” 。

Go 发布计划

2021 年 2 月,Go 1.16 版本将发布,该版本将包括新的文件系统接口和构建时文件嵌入。它将完成链接器的重写,从而带来更多的性能改进。它将包括对新的 Apple Silicon(GOARCH=arm64)Mac 的支持。

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

有关 Go module

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

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

从一开始,Go module 的目标就是 “将软件包版本的概念添加到 Go 开发人员和我们的工具的常用词汇中”,从而为整个 Go 生态系统中的 module 和版本提供深度支持。整个生态系统对包版本的广泛理解使得go module 镜像、chechsum 数据库和 module index成为可能。在明年,我们将看到更多 module 支持被添加到更多的工具和系统中。例如,我们计划研究新的工具,以帮助模块作者发布新版本(go release),并帮助 module 使用者摆脱过时的 API 并完成迁移(新的 go fix)。

一个更为有说服力的例子是,我们创建了 gopls来减少编辑器为支持 Go 而依赖许多外部工具的情况:将依赖一堆不支持 go module 的工具转变为只依赖一个支持 module 的工具。明年,我们将准备让 VSCode Go 扩展默认使用 gopls,以提供出色的、现成的 module 体验,并将发布 gopls 1.0。当然,gopls 最大的优势之一是它与编辑器无关:任何支持语言服务器协议的编辑器都可以使用它。

版本信息的另一个重要用途是跟踪构建中的任何程序包是否具有已知漏洞。明年,我们计划开发一个已知漏洞的数据库以及基于该数据库进行漏洞检查的工具程序。

Go 软件包发现站点 pkg.go.dev 是 Go module 启用的版本感知系统的另一个示例。我们一直致力于正确实现核心功能和用户体验,包括今天重新设计后的 pkg.go.dev 的上线。明年,我们将 godoc.org 统一为 pkg.go.dev。我们还将扩展展示每个软件包的版本时间线,显示每个版本的重要更改,已知漏洞等,以实现你进行依赖添加决策时所需的所有信息。

我们很高兴看到从 GOPATH 到 Go 模块的旅程即将完成,以及 Go 模块正在启用的所有出色的依赖关系感知工具。

有关 Go generics

每个人心中的下一个功能特性当然是泛型。如上所述,我们于今年 6 月发布了有关泛型的最新设计草案。从那时起,我们一直在做细节上的完善,并将注意力转移到了实现可生产版本的细节上。我们将在 2021 年的整个过程中继续努力,以期在年底之前为人们提供一些试用的目标,也许它是 Go 1.18 beta 的一部分。

感谢大家

Go 不仅限于我们这些 Google Go 团队的成员。我们要感谢与我们一起开发 Go 项目和工具的贡献者。除此之外,Go 之所以成功,是因为所有在 Go 蓬勃发展的生态系统中工作并为之贡献的人们。Go 之外的世界度过了艰难的一年。非常感谢您抽出宝贵的时间加入我们,并帮助 Go 取得成功。谢谢。我们希望大家都安全,并祝您一切顺利。


浏览 3
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报