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:201709

评论

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

饿了么4年 + 阿里2年:研发路上的一些总结与思考

程序员生活志

阿里 饿了么 经验总结

智能标注原理揭秘,一文读懂人工智能如何解决标注难题

百度大脑

人工智能 深度学习 百度 AI 百度大脑

字节跳动李本超:一年成为 Committer,我与 Flink 社区的故事

Apache Flink

flink

常见的emit实现AOP demo

八苦-瞿昙

随笔 随笔杂谈 aop

OFD 版式技术解析系列(三):仿射变换在OFD中的应用

华宇法律科技

版式文档 OFD 仿射变换

架构师第七周总结

傻傻的帅

架构师

金融科技的碎片化思考(上)

曲水流觞TechRill

金融科技 FinTech

网传Intel断供浪潮,英特尔:供应链调整

Geek_116789

Flink 最佳搭档:开发部署平台 Zeppelin 的自白

Apache Flink

【API进阶之路】因为不会创建云服务器,我被实习生摆了一道

华为云开发者社区

虚拟机 服务器 API 华为云 API接口管理

天府之国迎来数字经济发展高地新契机

CECBC区块链专委会

数字货币 区块链技术 应用落地 人才政策产业

盘点技术史:流量运营(PC时代)

DeeperMan

大数据 流量

最新:英特尔断供浪潮系内部供应链调整,现已恢复供货

Geek_116789

Python好找工作吗?

cdhqyj

[POJ 1000] A+B Problem 经典水题 JAVA解题报告

一直AC一直爽

POJ OJ ACM 水题

Java 面向对象知识整理

多选参数

Java 编程

BIGO | Likee深度推荐模型的特征工程优化

DT极客

密码学的随机性与区块链随机数

CECBC区块链专委会

程序员开启社交和打造影响力的最佳方式

非著名程序员

程序员 提升认知 写作 程序员成长 社交

一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

楼下小黑哥

nginx redis 分布式 session

JAVA算法

Bruce Duan

排序算法 Java算法

架构师训练营」第 7 周作业

edd

极客大学架构师训练营

报告|50%CRM品牌陷入竞争旋涡,破圈迫在眉睫

人称T客

又被逼着优化代码,这次我干掉了出入参 Log日志

程序员内点事

Java

Fastjson到了说再见的时候了

YourBatman

Jackson Fastjson JSON库

面向进化的软件架构

星际行者

软件架构 进化

计算机专业基础课教材推荐(无责任书评)

星际行者

数据库 操作系统 计算机体系结构 编译器

存储性能加速引擎之预读

焱融科技

Linux sds 焱融科技 分布式存储 预读

【小白学YOLO】一文带你学YOLOv1 Testing

华为云开发者社区

人工智能 算法 图像识别 什么是多线程

阿里云高级技术专家李晓成:面向5G的云网一体及云原生应用实践

巨侠说

kubernetes 集群升级,备份,故障恢复(kubeadm)

小小文

Kubernetes 群集安装 故障 kubeadm

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