Go 14周年
原文在这里。
由 Russ Cox, for the Go team 发布于2023年11月10日
今天,我们庆祝Go开源发布的第十四个生日!Go在过去一年里取得了巨大的进展,发布了两个功能丰富的版本,并实现了其他重要的里程碑。
我们发布了Go 1.20 in February和Go 1.21 in August,主要侧重于实现改进而非引入新的语言变化。
Go 1.20中预览的Profile-guided optimization(PGO)在Go 1.21中正式发布,允许Go编译器读取程序的性能分析数据,然后花更多时间优化程序中运行频率最高的部分。在Go 1.21中,启用PGO通常可以提升2%到7%的CPU利用率。有关概述,请参阅“Go 1.21中的Profile-guided optimization”,有关完整文档,请参阅“Profile-guided optimization用户指南”。
自Go 1.2版本以来,Go一直支持在go test
期间收集覆盖率分析数据。而Go 1.20版本新增了在通过go build
构建的可执行文件中收集覆盖率分析数据的支持,这意味着你可以在更大规模的集成测试中进行覆盖率分析。有关详细信息,请参阅“Go集成测试的代码覆盖率”文章。
自从“Go 1和Go程序的未来”以来,兼容性一直是Go的重要组成部分。Go 1.21通过扩展GODEBUG的使用约定进一步提高了兼容性,特别是在需要进行更改(例如重要的错误修复),但这种更改可能会破坏现有程序的情况下。有关概述,请参阅博文“向后兼容性,Go 1.21和Go 2”,有关详细信息,请参阅文档“Go、向后兼容性和GODEBUG”。
Go 1.21还引入了内置的工具链管理支持,允许您像更改其他依赖项的版本一样轻松地更改特定模块中使用的Go工具链版本。有关概述,请参阅博文“Go 1.21中的向前兼容性和工具链管理”,有关详细信息,请参阅文档“Go工具链”。
另一个重要的工具成就是将磁盘索引集成到gopls
,即Go的LSP服务器。这在典型用例中将gopls的启动延迟和内存使用降低了3-5倍。有关技术细节,请参阅“为不断增长的Go生态系统扩展gopls”文章。您可以通过运行以下命令来确保您正在运行最新版本的gopls:
$ go install golang.org/x/tools/gopls@latest
Go 1.21引入了新的cmp、maps和slices包,这是Go的第一个通用标准库,同时也扩展了可比较类型的集合。有关详细信息,请参阅博文“所有可比较类型”。
总的来说,我们继续完善泛型,并通过演讲和博客文章来解释重要的细节。今年的两篇重要文章分别是“拆解类型参数”和“关于类型推断,你想知道的都在这里”。
Go 1.21中的另一个重要新包是log/slog,它为标准库添加了用于结构化日志记录的官方API。请参阅“使用slog进行结构化日志记录”以获取概述。
对于WebAssembly(Wasm)端口,Go 1.21支持在WebAssembly System Interface(WASI)预览1上运行。WASI预览1是WebAssembly的一个新“操作系统”接口,受到大多数服务器端Wasm环境的支持。请查看“Go中的WASI支持”以获取详细信息。
在安全方面,我们继续确保Go引领着帮助开发人员了解其依赖关系和漏洞的道路,Govulncheck 1.0于7月发布。如果您使用VS Code,可以使用Go扩展直接在编辑器中运行govulncheck,详细配置参见这个教程。如果您使用GitHub,您可以使用GitHub Action for govulncheck在CI/CD中运行govulncheck。有关检查漏洞问题的依赖关系的更多信息,请参阅今年的Google I/O演讲“使用Go和Google构建更安全的应用程序”。
另一个重要的安全里程碑是Go 1.21的高度可复制的工具链构建。有关详细信息,请参阅“完全可重现的验证Go工具链”,其中包括在无需使用任何Linux工具情况下,在Mac上复制Ubuntu Linux Go工具链的演示。
今年真的是硕果累累!!!
在接下来的第15年,我们将继续努力使Go成为规模化软件工程的最佳环境。我们特别兴奋的一项变化是重新定义for循环的:=
语义,以消除意外别名错误的可能性。有关详细信息,请参阅“在Go 1.22中修复for循环”文章,其中包括在Go 1.21中预览此更改的说明。
致谢
Go项目一直不仅仅是我们在Google Go团队的工作。感谢所有的贡献者和Go社区的每一位成员,使Go成为今天的样子。我们祝愿大家在未来的一年里一切顺利。

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
Go 14周年的更多相关文章
- 【周年庆】china-pub 14周年庆感恩回馈四波狂热来袭
活动主题:china-pub 14周年庆感恩回馈四波狂热来袭活动说明:[第1波]电子书免费抢!10万好书 65折封顶! 活动规则: 1.活动期间内凡 ...
- Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析
Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...
- 《CODE》读后笔记——第14~20章
14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...
- 实践GTD三周年后的体会
从2011年7月开始实践GTD到现在已经3年多了,按照年初设定的目标,应该写点GTD的体会,但提起笔来的时候却发现并没有什么太新的体会,大部分体会都已经在以前的文章中写到了,甚至有些流程已经简化了,看 ...
- 《C++程序设计语言(十周年纪念版)》【PDF】下载
<C++程序设计语言(十周年纪念版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382171 内容简介 <C++程序设计 ...
- 机械革命 x7ti-s 1周年使用报告
2017年11月19日在京东入手一台机械革命x7ti-s(https://item.jd.com/5048818.html)当时各种优惠返现什么的最终8399.5到手(是1060显卡的机械版).前几周 ...
- Win10一周年纪念版,瞧一瞧Linux子系统
Bash Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令.Bash还能从文件中读取命令,这样的文件称为脚本.和其他Unix shell 一样,它支持文件名替换(通配符匹配) ...
- 【LGR-048 五周年庆贺】洛谷6月月赛
Luogu的五周年庆典比赛,还是比较满意的. 题目清新不毒瘤,数据优质不卡常,解法自然,为出题人点赞. 前三题的难度都很低,T5个人感觉还好.但是最后那个splay+hash是什么神仙东西. 最后好像 ...
- GTD实践2周年后一些体会
从2011年7月1日算起,实践GTD已经有2年多了,在GTD一周年时写了<用iPhone打造GTD实践1周年的心得体会>这篇文章,随着实践的深入,如今又有了一些新的认识,2013年初制定的 ...
- eoLinker上线两周年+ AMS V4.0 发布:全新UI界面,带来领先的API开发管理解决方案!
2018年7月,eoLinker 发布了<eoLinker AMS 2018年年中用户调研问卷>,前后经历一周的时间,共收集到超过1000份有效调查问卷.超过300个有效改进意见. eoL ...
随机推荐
- Linux 概念:u-boot
U-Boot介绍 参考:https://baike.baidu.com/item/U-Boot/10377075 参考:https://u-boot.readthedocs.io/en/latest/ ...
- PlayWright(二十二)- allure插件(一)
在上文中,我们介绍并使用了pytest-html插件,总之并不复杂,但是今天我们要讲一个比pytest-html插件强很多的插件allure报告,我们要掌握他并且灵活使用,之后的框架就不需要考虑其他的 ...
- error: failed to push some refs to 'https://gitee.com/xxxxxxxxx/xxxxxxxt'
原因是ReadMe文件不在本地中, 此时我们要执行git pull --rebase origin master命令README.md拉到本地, 任何然后执行git push origin maste ...
- 新一代开源流数据湖平台Apache Paimon入门实操-上
@ 目录 概述 定义 核心功能 适用场景 架构原理 总体架构 统一存储 基本概念 文件布局 部署 环境准备 环境部署 实战 Catalog 文件系统 Hive Catalog 创建表 创建Catalo ...
- 从ABNF读懂HTTP协议格式
定义 HTTP(Hyper Text Transfer Protocol)超文本传输协议 HTML( Hyper Text Markup Language)超文本标记语言 URI(Uniform Re ...
- 实现无限存储:基于JuiceFS 创建 Samba 和 NFS 共享
随着企业数据量的持续增长,存储容量需求日益增大.如何采用没有容量上限的云存储替换本容量有限的本地磁盘,已成为广泛的需求和共识.特别是在企业中常用的 Samba 和 NFS 共享,如果能够使用云存储作为 ...
- MySQL查询语句的执行过程
SQL语句的查询过程 文章源自:极客时间-MySQL核心知识45讲 1. 前言 先看一张图和一个简单的SQL查询语句:select * from T where ID=10; 2. 概述 大体来说,M ...
- Thinkphp 5.x 远程代码执行漏洞利用小记
Thinkphp 5.x远程代码执行漏洞存在于Thinkphp 5.0版本及5.1版本,通过此漏洞,可以在远程执行任意代码,也可写入webshell 下面是对其进行的漏洞利用! 漏洞利用: 1,利用s ...
- python爬虫抓取图片
一.什么是爬虫 什么是爬虫?爬虫是蜘蛛么?是八爪鱼么?nonono. 爬虫是指请求网站并获取数据的自动化程序,又称网页蜘蛛或网络机器,最常用领域是搜索引擎,最常用的工具是八爪鱼. 它的基本流程分为以下 ...
- 记录一次解决数据库连接池连接泄露BUG
1 BUG现象 系统并发请求,系统停滞无法使用,所有接口都是无法与后端进行交互的状态,系统并没有宕机 2 BUG的业务流程 插入分数方法 涉及插入表ABCD 加了声明式事务 查询分数方法 涉及表ABC ...