在中华大地的老百姓抱着手机进行双十一购物节狂欢,忙着支付尾款和秒杀的时候,Go核心团队的Russ Cox代表Go语言项目团队在Go官博上发表了《Thirteen Years of Go》[1]的博文,纪念Go语言开源13周年,并对2021年以来Go语言的演进进行了归纳总结,对Go在其第14个年头将要做的改进也做了简单的说明。这里对博文做简单翻译,供大家参考。
今天,我们庆祝Go开源版本的十三岁生日。从今天起,Go将正式步入青少年阶段!
译注:teenager:青少年;13岁到19岁的年轻人
对于Go来说,过去的一年是不平凡的一年。在这一年里发生的最重要的事件是Go 1.18版本在3月份的发布[2],这个版本带来了许多改进,其中最显着的是Go工作区[3]、模糊测试[4]和Go泛型[5]。
Go工作区使得同时处理多个module变得容易,尤其是当你维护一组彼此有依赖关系的module时。若要了解Go工作区,请参阅Beth Brown的博客文章“熟悉工作区”[6]和工作区参考文档[7]。
模糊测试(Fuzzing)是一个新功能特性,它可以帮助你查找出代码无法正确处理的输入。你只需定义一个接受任何输入数据的模糊测试,然后模糊测试会尝试不同的随机输入,这个过程由代码覆盖率指导,并努力尝试使模糊测试执行失败。在开发对任意输入(甚至是攻击者控制的输入)具有鲁棒性的代码时,模糊测试尤其有用。若要了解有关模糊测试的详细信息,请参阅教程“模糊测试入门”[8]和模糊测试参考文档[9],并留意凯蒂·霍克曼(Katie Hockman)在GopherCon 2022上的演讲“Fuzzing Test made Easy”,这个演进的视频应该很快就会上线的。
泛型,很可能是Go开发者最需要的功能特性(译注:来自Go官方调查数据),它在Go中增加了参数多态性机制,以支持编写可适配各种不同类型的代码,并且仍不会失去编译时静态检查的保证。要了解有关泛型的更多信息,请参阅教程“泛型入门”[10]。更多详细信息,请参阅博客文章《泛型简介》[11] 和“何时使用泛型”[12],或是来自Go Day 2021年谷歌开源直播“在Go中使用泛型”[13]以及来自GopherCon 2021由Robert Griesemer和Ian Lance Taylor共同的演讲“Generics”[14]。
与Go 1.18版本相比,今年8月份发布的Go 1.19版本[15]显得有些波澜不惊,这与该版本专注于完善和改进Go 1.18引入的功能特性以及内部稳定性改进和优化不无关系。Go 1.19的一个明显变化是增加了支持Go文档注释中的链接、列表和标题[16]。另一个则是为垃圾回收器添加了软内存限制(soft memory limit)[17],这在容器工作负载中特别有用。有关最近的垃圾回收器改进的更多信息,参见Michael Knyszek的博客文章“Go Runtime:4 Years later”[18]、他的演讲“Respecting Memory Limits in Go”[19] 以及新的“Go垃圾收集器指南”[20]。
我们一直努力让Go代码开发可以更优雅的扩展,支持更大规模的代码库,我们在VS Code Go和Gopls语言服务器上的工作就致力于此。今年,Gopls的工作聚焦于提高稳定性和性能,同时提供了对泛型以及新的代码分析的支持。如果你还没有使用VS Code Go或Gopls,不妨尝试一下。可以看看苏茜·穆勒(Suzy Mueller)的演讲“使用Go编辑器构建更好的项目”[21]。 作为奖励,在VS Code 中调试Go[22]通过Delve原生对调试适配器协议(Debug Adapter Protocol)[23]支持而变得更加可靠和强大。最后试试苏茜的《调试寻宝记》[24]吧!
开发规模的另一部分是项目中依赖项的数量。Go 12岁生日[25]后的一个月左右,Log4shell漏洞[26]的出现为行业敲响警钟,关于供应链安全的重要性得以提升。Go的module系统是专门为此而设计的,帮助您了解和跟踪依赖项,确定您正在使用哪些特定的依赖,并确定其中是否有任何已知漏洞。菲利波·瓦尔索达的博客文章“如何缓解供应链攻击”[27] 概述了我们的方法。9月,我们通过Julie Qiu的博客文章“Vulnerability Management for Go”[28]发布了Go漏洞管理方法预览版,这项工作的核心是一个新的、精心策划的漏洞数据库 和一个新的govulncheck命令[29],它使用高级静态分析来消除大多数误报。
我们为了了解Go用户而付出的努力之一是我们的年度Go年终调查。今年,我们的用户体验研究人员还增加了一个轻量级的年中Go调查。我们的目标是收集足够的回复,使其具有统计意义,而这也不会成为整个Go社区的负担。有关结果,请参阅Alice Merrick的博客文章“Go开发者调查2021年结果”[30]和托德·库列萨的文章“Go开发者调查2022 年第二季度结果”[31]。
随着世界开始恢复更多地旅行,我们也很高兴在2022年的Go技术会议上亲自见到你们中的许多人,特别是7月在柏林举行的GopherCon欧洲大会和10月在芝加哥举行的GopherCon。上周,我们在谷歌开源直播上举办了一年一度的虚拟活动Go Day[32]。 以下是我们在这些活动上的一些演讲:
Go是如何成为最好的自己的[33], 作者:Cameron Balahan,在GopherCon Europe。
“Go团队Q&A”[34], 与Cameron Balahan,Michael Knyszek和Than McIntosh一起在GopherCon欧洲。
“兼容性:Go程序如何保持工作”[35], 作者:Russ Cox at GopherCon。
“Go整体体验”[36], 作者:Cameron Balahan在GopherCon(视频尚未发布)
“Go语言的结构化日志包”[37], 作者:Jonathan Amsterdam 在 Go Day 上 Google Open Source Live
“使用Go更快、更安全地编写应用程序”[38], 作者:Cody Oss 在 Go Day 上 Google Open Source Live
“Go中的内存限制[39], 作者:Michael Knyszek 在Go Day上 Google Open Source Live
今年的另一个里程碑是出版了“Go 编程语言和环境”[40], 作者是Russ Cox、Robert Griesemer、Rob Pike、Ian Lance Taylor和Ken Thompson,文章发表在“ACM通信”中。 这篇文章,由Go的原始设计者和实现者解释了我们认为是什么让Go如此受欢迎和富有成效。 简而言之,Go 的工作重点是提供完整的开发环境。针对整个软件开发过程,重点是扩展到大型软件工程工作和大型部署。
在Go的第14个年头,我们将继续努力使Go成为用于大规模软件工程的最好的环境。我们计划特别关注供应链安全,提高兼容性和结构化日志记录,所有这些都已在这篇文章中有链接。当然还会有很多其他改进,包括profile-guided optimization等。
谢谢!Go一直远远超过Google的Go团队所做的。感谢你们所有人——我们的贡献者和Go社区中的每个人——感谢您的帮助使Go成为今天的成功编程环境。我们祝愿你在来年一切顺利。
“Gopher部落”知识星球[41]旨在打造一个精品Go学习和进阶社群!高品质首发Go技术文章,“三天”首发阅读权,每年两期Go语言发展现状分析,每天提前1小时阅读到新鲜的Gopher日报,网课、技术专栏、图书内容前瞻,六小时内必答保证等满足你关于Go语言生态的所有需求!2022年,Gopher部落全面改版,将持续分享Go语言与Go应用领域的知识、技巧与实践,并增加诸多互动形式。欢迎大家加入!
Gopher Daily(Gopher每日新闻)归档仓库 - https://github.com/bigwhite/gopherdaily
我的联系方式:
微博(暂不可用):https://weibo.com/bigwhite20xx
微博2:https://weibo.com/u/6484441286
博客:tonybai.com
github: https://github.com/bigwhite
商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。
参考资料
[1]
《Thirteen Years of Go》: https://go.dev/blog/13years
[2]Go 1.18版本在3月份的发布: https://tonybai.com/2022/04/20/some-changes-in-go-1-18
[3]Go工作区: https://tonybai.com/2021/11/12/go-workspace-mode-in-go-1-18
[4]模糊测试: https://tonybai.com/2021/12/01/first-class-fuzzing-in-go-1-18
[5]Go泛型: https://tonybai.com/2022/03/25/intro-generics
[6]“熟悉工作区”: https://go.dev/blog/get-familiar-with-workspaces
[7]工作区参考文档: https://go.dev/ref/mod#workspaces
[8]“模糊测试入门”: https://go.dev/doc/tutorial/fuzz
[9]模糊测试参考文档: https://go.dev/security/fuzz/
[10]“泛型入门”: https://go.dev/doc/tutorial/generics
[11]《泛型简介》: https://tonybai.com/2022/03/25/intro-generics
[12]“何时使用泛型”: https://go.dev/blog/when-generics
[13]“在Go中使用泛型”: https://www.youtube.com/watch?v=nr8EpUO9jhw
[14]“Generics”: https://www.youtube.com/watch?v=Pa_e9EeCdy8
[15]Go 1.19版本: https://tonybai.com/2022/08/22/some-changes-in-go-1-19
[16]增加了支持Go文档注释中的链接、列表和标题: https://go.dev/doc/comment
[17]添加了软内存限制(soft memory limit): https://go.dev/doc/go1.19#runtime
[18]“Go Runtime:4 Years later”: https://go.dev/blog/go119runtime
[19]“Respecting Memory Limits in Go”: https://www.youtube.com/watch?v=07wduWyWx8M&list=PLtoVuM73AmsJjj5tnZ7BodjN_zIvpULSx
[20]“Go垃圾收集器指南”: https://go.dev/doc/gc-guide
[21]“使用Go编辑器构建更好的项目”: https://www.youtube.com/watch?v=jMyzsp2E_0U
[22]在VS Code 中调试Go: https://go.dev/s/vscode-go-debug
[23]调试适配器协议(Debug Adapter Protocol): https://microsoft.github.io/debug-adapter-protocol/
[24]《调试寻宝记》: https://www.youtube.com/watch?v=ZPIPPRjwg7Q
[25]Go 12岁生日: https://tonybai.com/2021/11/11/go-opensource-12-years
[26]Log4shell漏洞: https://en.wikipedia.org/wiki/Log4Shell
[27]“如何缓解供应链攻击”: https://tonybai.com/2022/04/02/how-go-mitigates-supply-chain-attacks
[28]“Vulnerability Management for Go”: https://tonybai.com/2022/09/10/an-intro-of-govulncheck
[29]govulncheck命令: https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck
[30]“Go开发者调查2021年结果”: https://go.dev/blog/survey2021-results
[31]“Go开发者调查2022 年第二季度结果”: https://go.dev/blog/survey2022-q2-results
[32]Go Day: https://opensourcelive.withgoogle.com/events/go-day-2022
[33]Go是如何成为最好的自己的: https://www.youtube.com/watch?v=vQm_whJZelc
[34]“Go团队Q&A”: https://www.youtube.com/watch?v=KbOTTU9yEpI
[35]“兼容性:Go程序如何保持工作”: https://www.youtube.com/watch?v=v24wrd3RwGo
[36]“Go整体体验”: https://www.gophercon.com/agenda/session/998660
[37]“Go语言的结构化日志包”: https://tonybai.com/2022/10/30/first-exploration-of-slog
[38]“使用Go更快、更安全地编写应用程序”: https://opensourcelive.withgoogle.com/events/go-day-2022/watch?talk=talk3
[39]Go中的内存限制: https://opensourcelive.withgoogle.com/events/go-day-2022/watch?talk=talk4
[40]“Go 编程语言和环境”: https://tonybai.com/2022/05/04/the-paper-of-go-programming-language-and-environment
[41]“Gopher部落”知识星球: https://wx.zsxq.com/dweb2/index/group/51284458844544