今天(2021-11-10),是我们庆祝Go语言开源发布的第12个生日。我们度过了多事之秋的一年,明年也有很多值得期待的事情。大家好!今天生态君给大家带来一篇Go官方Blog的文章《Go12岁了》,生态君根据文章内容画了一张 Go 2021-2022的Timeline图。
原文 Twelve Years of Go https://go.dev/blog/12years
博客上最明显的变化是我们在 go.dev上的新家[1],这是我们将所有的Go网站整合成一个统一的网站的一部分。合并的另一部分是用 pkg.go.dev 取代 godoc.org[2]。
2月,Go 1.16版本[3]增加了macOS ARM64支持[4],增加了一个文件系统接口[5]和嵌入式文件[6],并默认启用了module[7],同时还进行了一系列的改进和优化。
8 月,Go 1.17 版本[8]增加了 Windows ARM64 支持,使TLS 密码套件决策更加简单和安全[9],引入了Pruned module graphs[10],使module在大型项目中变得更加高效,并增加了新的、更具可读性的构建约束语法[11]。在系统内部,Go 1.17还为x86-64上的Go函数切换到了基于寄存器的调用约束,使受CPU约束的应用程序的性能提高了5-15%。
这一年来,我们发布了许多新的教程[12],Go数据库指南[13],modules开发指南[14],以及gomod参考[15]。一个亮点是新的教程"用Go和Gin开发一个RESTful风格的API[16]",该教程也可以在Google Cloud Shell[17] 进行交互学习。
我们也一直忙于 IDE 方面,在 VS Code Go 中默认启用 gopls[18],并对gopls和 VS Code Go进行了无数次的改进,包括由 Delve 支持的强大的调试功能体验[19]。
我们还推出了Go fuzzing beta[20],并正式提议在Go中加入泛型[21],这两者都有望在在Go1.18中实现。
为了继续适应"virtual-first",Go团队在Google Open Source Live-谷歌开源直播[22]中举办了第二届年度Go Day。你可以在 Youtube 上观看这些讲座:
Ian Lance Taylor的在Go中使用泛型[23],介绍了泛型以及如何有效地使用它们。 《现代企业应用[24]》由Steve Francia主讲,展示了Go如何在企业现代化中发挥作用。 Suzy Mueller 的《用Go 编辑器构建更好的项目[25]》展示了 VS Code Go 的集成工具如何帮助你浏览代码、调试测试等。 美国运通杰出工程师本Benjamin Cane的《从概念验证到生产[26]》,解释了美国运通公司如何在其支付和奖励平台中使用Go。
展望未来
我们对Go第13年的发展感到非常激动。下个月,我们将在GopherCon 2021[27]上举办两场讲座,同时还有许多来自Go社区的天才演讲者[28]。欢迎注册,并记得在你的日历上做个标记!
"为什么和如何使用Go泛型",由Robert Griesemer和Ian Lance Taylor主讲,他们主导了这项新功能的设计和实施。12月8日上午11:00(美国东部)[29] "使用调试适配器协议(DAP)调试Go代码",作者Suzy Mueller,展示如何使用Delve来进行 VS Code Go的高级调试功能。12月9日下午3:20(美国东部)[30]
2022 年 2月,Go 1.18版本将把新的基于寄存器的调用约定扩展到非x86架构上,并会带来巨大的性能改进。它将包括新的Go模糊支持。这也将是第一个包括对泛型支持的版本。
泛型将是我们2022年的重点之一。Go 1.18中的初始版本只是一个开始。我们需要花很多时间使用泛型,了解哪些是有效的,哪些是无效的,这样我们才能写出最佳实践,并决定哪些应该被添加到标准库和其他库中。我们期望Go 1.19(预计在2022年8月)及以后的版本将进一步完善泛型的设计和实现,并将其进一步整合到整个Go的体验中。
2022年的另一个重点是供应链安全 。这么多年来我们一直在讨论依赖性问题[31]。Go模块的设计提供了可重复、可验证、可验证的构建[32],但仍有更多工作要做。从Go 1.18开始,该命令将在二进制文件中嵌入更多关于其构建配置的信息,既可重复更易于使用,也是为了帮助那些需要为Go二进制文件生成 SBOM[33]的项目。我们也已经开始了Go漏洞数据库[34]和相关工具的工作,来报告程序依赖中的漏洞。我们在这项工作中的目标之一是大幅提高这种工具的信号与噪声比:如果一个程序不使用有漏洞的功能,我们就不会报告。在2022年期间,我们计划将其作为一个独立的工具,也会将其添加到现有的工具中,包括gopls和VS Code Go,以及pkg.go.dev中。还有更多工作要做,以改善Go的供应链安全状况的其他方面。敬请期待。
总的来说,我们预计2022年也是Go的多事之秋的一年,我们会持续及时地发布和改进您所期待的内容。
感谢!
Go不仅仅包括我们谷歌的Go团队,而且还需要你们的支持。非常感谢你们帮助Go取得了巨大的成功也欢迎你们加入我们。最后祝大家事事顺心如意。
参考资料
go.dev上的新家: https://go.dev/blog/tidy-web
[2]pkg.go.dev 取代 godoc.org: https://go.dev/blog/godoc.org-redirect
[3]Go 1.16版本: https://go.dev/blog/go1.16
[4]macOS ARM64支持: https://go.dev/blog/blog/ports
[5]一个文件系统接口: https://golang.org/pkg/io/fs
[6]嵌入式文件: https://golang.org/pkg/embed
[7]默认启用了module: https://go.dev/blog/go116-module-changes
[8]Go 1.17 版本: https://go.dev/blog/go1.17
[9]TLS 密码套件决策更加简单和安全: https://go.dev/blog/tls-cipher-suites
[10]Pruned module graphs: https://golang.org/doc/go1.17#go-command
[11]新的、更具可读性的构建约束语法: https://pkg.go.dev/cmd/go#hdr-Build_constraints
[12]许多新的教程: https://golang.org/doc/tutorial/
[13],Go数据库指南: https://golang.org/doc/database/
[14]modules开发指南: https://golang.org/doc/#developing-modules
[15]以及gomod参考: https://golang.org/ref/mod
[16]用Go和Gin开发一个RESTful风格的API: https://golang.org/doc/tutorial/web-service-gin
[17]Google Cloud Shell: https://golang.org/s/cloud-shell-web-tutorial
[18]在 VS Code Go 中默认启用 gopls: https://go.dev/blog/gopls-vscode-go
[19]强大的调试功能体验: https://github.com/golang/vscode-go/blob/master/docs/debugging.md
[20]Go fuzzing beta: https://go.dev/blog/fuzz-beta
[21]正式提议在Go中加入泛型: https://go.dev/blog/generics-proposal
[22]在Google Open Source Live-谷歌开源直播: https://opensourcelive.withgoogle.com/events/go-day-2021
[23]在Go中使用泛型: https://www.youtube.com/watch?v=nr8EpUO9jhw
[24]现代企业应用: https://www.youtube.com/watch?v=5fgG1qZaV4w
[25]用Go 编辑器构建更好的项目: https://www.youtube.com/watch?v=jMyzsp2E_0U
[26]从概念验证到生产: https://www.youtube.com/watch?v=e7PtBOsTpXE
[27]GopherCon 2021: https://www.gophercon.com/
[28]来自Go社区的天才演讲者: https://www.gophercon.com/agenda
[29]12月8日上午11:00(美国东部): https://www.gophercon.com/agenda/session/593015
[30]12月9日下午3:20(美国东部): https://www.gophercon.com/agenda/session/593029
[31]依赖性问题: https://research.swtch.com/deps
[32]可重复、可验证、可验证的构建: https://research.swtch.com/vgo-repro
[33]生成 SBOM: https://en.wikipedia.org/wiki/Software_bill_of_materials
[34]漏洞数据库: https://pkg.go.dev/golang.org/x/vuln
推荐阅读