Go 语言开源发布十一年,未来将重点支持Go模块和泛型

2020 年 11 月 11 日

Go 语言开源发布十一年,未来将重点支持Go模块和泛型

Go 语言发布十一周年了。


回想 Go 语言的十周年庆典已经恍如隔世,2020 年是艰难的一年,但我们一直在推动 Go 的发展,也带来了不少值得回忆的美好瞬间。


去年 11 月,我们在 Go 十岁生日后不久,启动了go.dev pkg.go.dev


今年 2 月,Go 1.14 版本带来 Go 模块的首个“生产就绪”实现,同时迎来一系列性能改进,包括用于减少调度并降低垃圾收集延迟的更快推迟速度及非合作 goroutine 抢占。


3 月初,我们推出了新的协议缓冲区 APIgoogle.golang.org/protobuf,它大大提高了对协议缓冲区反射及自定义消息的支持能力。


面对突如其来的 COVID-19 疫情,我们决定在春季暂停所有公告或发布事宜,希望大家能够把注意力集中在抗疫这一头等大事上。但我们的前进脚步并未停止,Go 团队中的一名成员加入了苹果/谷歌关于隐私保护的公开合作项目,负责在全球范围内支持联系人跟进工作。5 月,开发团队又启动了用 Go 编写的参考后端服务器。


我们继续改进 gopls,借此在多种编辑器中实现了对高级 Go 感知功能的支持。6 月,VSCodeGo 扩展正式加入 Go 项目,目前由负责 gopls 的同一位开发者进行维护。


同样是在 6 月,综合大家的反馈意见,我们对 pkg.go.dev 代码进行开源,并将其作为 Go 项目的组成部分。


6 月下旬,我们发布了关于泛型的最新设计草案,附带一款原型设计工具与generics playground


7 月,我们发布并讨论了三套新的设计草案以供后续修改:用于文件选择的 //go:build行,文件系统接口以及build-time文件嵌入。(将在 2021 年正式推出。)


8 月,Go 1.15 版本主要提供优化与 bug 修复。最重要的是,我们开始重写链接器,使其运行速度提高了 20%且在大型构建作业中的平均内存占用量降低了 30%。


上个月,我们进行了年度 Go 用户调查。在完成分析之后,我们将把结果发布在博客上。


Go 社区也开始逐步适应“虚拟优先”原则,今年以来我们先后参加并组织了多场线上形式的虚拟会议。上周,GO 团队还在谷歌开源 Live 上举办了 Go 主题日活动。

Go 语言发布计划


明年 2 月,Go 1.16 将包含新的文件系统接口与 build-time 文件嵌入。新版本还将完成对链接器的重写,借此带来更可观的性能改进。1.16 版本也将提供对采用新一代苹果芯片(GOARCH = arm64)的 Mac 设备的支持。


明年 8 月,Go 1.17 将带来更多功能与改进,但目前我们还无法确定太多细节。根据计划,1.17 版本将提供一项针对 x86-64、基于寄存器的新型调用约定(不影响现有指令集!),使得程序的整个运行流程变得更快。(其他架构将在未来的版本中发布。)此外该版本还将包含新的//go:build 行,出错几率比现有//+build 行更低。最后,我们还希望能够在明年对另一项备受期待的功能完成 Beta 测试,即支持 gotest 命令中的模糊测试。


Go 模块


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


我们还将终止对基于 GOPATH 开发工作的支持。未来,使用标准库以外任何其他依赖项的程序,都需要配合 go.mod。(如果您尚未进行模块切换,请参阅GOPATH维基页面以了解关于从 GOPATH 到模块的更多详细信息。


从起步之初,Go 模块的目标就是“将软件包版本的概念融入 Go 开发者与我们工具的日常场景当中”,借此为整个 Go 生态系统中的模块及版本提供深度支持。事实上,Go 模块的镜像、校验数据库以及索引在实现过程中也充分考虑到了整个生态系统范围内的软件包版本。明年,我们将在工具与系统当中推出更多丰富的模块支持选项。例如,我们有计划研究新的工具,帮助模块作者发布模块新版本(go release),并帮助他们更新那些依赖于过时 API 的代码(新的 go fix)。


更重要的是,我们还创建了 gopls 以减少以往编辑器在支持 Go 时需要使用的多种工具。这类工具绝大多数不支持模块,因此必须加以替换。明年,我们将着手在 VSCodeGo 扩展中默认使用 gopls,同时发布 gopls1.0,希望为大家带来出色的模块体验。Gopls 的一大优势在于,其具备编辑器中立性:任何能够理解该语言服务器协议的编辑器都可以正常使用。


版本信息的另一个重要用途,在于跟踪 build 中的各软件包是否存在已知漏洞。明年,我们计划开发一套已知漏洞数据库,外加与之配套的漏洞检查工具。


Go 软件包发现站点pkg.go.dev也将在 Go 模块的支持下获得版本感知功能。我们一直在努力实现正确的核心功能与用户体验,目前的重新设计工作也正是为此而生。明年,我们会将 godoc.org 统一进 pkg.go.dev 当中。我们还将扩展各软件包的版本时间表,列出各个版本的重要变更及已知漏洞等,希望能够以总体目标为基础帮助大家更明智地选择适合添加的依赖项。


我们高兴地看到从 GOPATH 到 GO 模块的迁移之旅即将完成,而 Go 模块也开始推出一系列强大的依赖项感知工具。


泛型


广受 Go 用户们期待的新功能,自然非泛型莫属。如上所述,我们于今年 6 月发布了关于泛型的最新设计草案。在此之后,我们一直在完善相关工作,并将注意力转移到生产就绪版本的实现身上。我们将在 2021 年年内继续努力,力争在年底之前为大家带来一些可供试用的成果,也许会以 Go 1.18 beta 的形式发布。


Go 生态系统的贡献者绝不止于谷歌内部的 Go 团队。我们要感谢与我们一起使用 Go 与工具的贡献者们。除此之外,Go 能够获得成功,也离不开每一位朋友在生态系统中做出的大力支持。2020 年是艰难的一年,感谢大家抽出宝贵时间加入我们这个大家庭,并帮助 Go 取得成功。


原文链接:


https://blog.golang.org/11years


2020 年 11 月 11 日 16:201832

评论

发布
暂无评论
发现更多内容

第一周总结

gen_jin

食堂就餐卡系统设计

yupi

作业二:根据当周学习情况,完成一篇学习总结

飞翔的风

架构师训练营第一周学习总结

JUN

架构0期作业1

Nan Jiang

读笔 | 为什么“杨丽萍”们的生活被指责

张鸱鸺

读书笔记 心灵圣经 生活方式

就餐系统架构设计

草原上的奔跑

极客大学架构师训练营

食堂就餐卡系统设计

漫步跑小鸡

架构师训练营第一周学习总结

跨域刀

极客大学架构师训练营

极客时间-作业一-食堂就餐卡系统设计

刘柯

架构师训练Week1 - 学习总结

伊利是个圈

学习 极客大学架构师训练营

食堂就餐卡系统设计

weijin

架构师训练营 第一周 作业

极客大学架构师训练营

信息的表示与存储-浮点数的表示

引花眠

计算机基础

【架构师week01】作业

高程

架构师 作业

【架构课笔记-第一周】一般方法与设计文档

Nelson

架构师训练营 - Task Week 1

brave heart

极客大学架构师训练营

ARTS打卡 第3周

引花眠

ARTS 打卡计划

食堂就餐卡系统设计

跨域刀

极客大学架构师训练营

架构训练营第一周-作业

无心水

【架构师训练营 - week1 -2】学习总结

早睡早起

食堂就餐卡系统设计

逍遥乐天

第一周作业(2)

佳明

把生活找回来

zhoo299

随笔杂谈

就餐卡系统设计文档 【第一周】

mylove321

架构师-悟性和技能

yupi

架构师-Week1作业

龙7

极客大学架构师训练营

作业一:食堂就餐卡系统设计

飞翔的风

week0-作业一

徐培

架构师训练营week01-食堂就餐卡系统设计

Just顾

《架构师训练营》第一周学习总结

Go 语言开源发布十一年,未来将重点支持Go模块和泛型-InfoQ