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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: