Go,13周年

在中华大地的老百姓抱着手机进行双十一购物节狂欢,忙着支付尾款和秒杀的时候,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应用领域的知识、技巧与实践,并增加诸多互动形式。欢迎大家加入!

d6e9dbf65624245f23f7ad1bee796603.png

d3d0c384f52d4df5ab834fcde435a196.png


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

c713b63df3049907749dba21c88fbd22.png

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

参考资料

[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值