原文在这里

由 Russ Cox, for the Go team 发布于2023年11月10日

今天,我们庆祝Go开源发布的第十四个生日!Go在过去一年里取得了巨大的进展,发布了两个功能丰富的版本,并实现了其他重要的里程碑。

我们发布了Go 1.20 in FebruaryGo 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引入了新的cmpmapsslices包,这是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周年的更多相关文章

  1. 【周年庆】china-pub 14周年庆感恩回馈四波狂热来袭

    活动主题:china-pub 14周年庆感恩回馈四波狂热来袭活动说明:[第1波]电子书免费抢!10万好书 65折封顶!              活动规则:              1.活动期间内凡 ...

  2. Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析

    Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...

  3. 《CODE》读后笔记——第14~20章

    14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...

  4. 实践GTD三周年后的体会

    从2011年7月开始实践GTD到现在已经3年多了,按照年初设定的目标,应该写点GTD的体会,但提起笔来的时候却发现并没有什么太新的体会,大部分体会都已经在以前的文章中写到了,甚至有些流程已经简化了,看 ...

  5. 《C++程序设计语言(十周年纪念版)》【PDF】下载

    <C++程序设计语言(十周年纪念版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382171 内容简介 <C++程序设计 ...

  6. 机械革命 x7ti-s 1周年使用报告

    2017年11月19日在京东入手一台机械革命x7ti-s(https://item.jd.com/5048818.html)当时各种优惠返现什么的最终8399.5到手(是1060显卡的机械版).前几周 ...

  7. Win10一周年纪念版,瞧一瞧Linux子系统

    Bash Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令.Bash还能从文件中读取命令,这样的文件称为脚本.和其他Unix shell 一样,它支持文件名替换(通配符匹配) ...

  8. 【LGR-048 五周年庆贺】洛谷6月月赛

    Luogu的五周年庆典比赛,还是比较满意的. 题目清新不毒瘤,数据优质不卡常,解法自然,为出题人点赞. 前三题的难度都很低,T5个人感觉还好.但是最后那个splay+hash是什么神仙东西. 最后好像 ...

  9. GTD实践2周年后一些体会

    从2011年7月1日算起,实践GTD已经有2年多了,在GTD一周年时写了<用iPhone打造GTD实践1周年的心得体会>这篇文章,随着实践的深入,如今又有了一些新的认识,2013年初制定的 ...

  10. eoLinker上线两周年+ AMS V4.0 发布:全新UI界面,带来领先的API开发管理解决方案!

    2018年7月,eoLinker 发布了<eoLinker AMS 2018年年中用户调研问卷>,前后经历一周的时间,共收集到超过1000份有效调查问卷.超过300个有效改进意见. eoL ...

随机推荐

  1. zabbix 主动模式下报文分析

    获取监控项列表 客户端发起请求 3次握手之后,请求监控项列表: {"request":"active checks","host":&quo ...

  2. FreeBSD 内核模块和硬盘相关

    查看已加载的内核模块 使用命令:kldstat 加载驱动: kldload xx 查看识别到的硬盘 使用命令:dmesg | grep sector freeBSD 查看硬件信息 使用命令:dmesg ...

  3. EF 管理数据库架构

    本章会主要了解EF提供的独立迁移项目,用独立迁移项目自动创建dgml设计关系图和sql脚本. 迁移项目通常也叫(CodeFirst代码优先),在EF中迁移项目是在,在代码中设计数据库,每次对数据库的设 ...

  4. 快速入门OpenCv(python版)

    OpenCV是一个(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python. ...

  5. 个人用C#编写的壁纸管理器 - 开源研究系列文章

    今天介绍一下笔者自己用C#开发的一个小工具软件:壁纸管理器. 开发这个小工具的初衷是因为Windows操作系统提供的功能个人不满意,而且现在闲着,所以就随意写了个代码.如果对读者有借鉴参考作用就更好了 ...

  6. 从数据库方向getshell方法总结

    前提 拿到数据库权限,可以执行sql语句,或者进入到phpmyadmin界面,或pmd界面 phpstudy 对应phpmyadmin界面 phpmyadmin.php upupw 对应pmd界面 u ...

  7. html5 2.0学习

    列表定义:是一种特别的对象集合.集合:集中在一起合二为一(聚集). 聚集:多个列(信息资源)排在一起.信息资源:一堆数据,可能是字符,可能是图片. 列表分类:有序列表 无序列表  (自)定义列表  有 ...

  8. ros源的移除

    在Ubuntu上卸载了ros系统后,每次运行源更新命令 sudo apt update 都会报错,提示ros源找不到等问题. 这时,只需要 cd /etc/apt/souce.list.d sudo ...

  9. SpringBoot3.x原生镜像-Native Image实践

    前提 之前曾经写过一篇<SpringBoot3.x 原生镜像-Native Image 尝鲜>,当时SpringBoot处于3.0.0-M5版本,功能尚未稳定.这次会基于SpringBoo ...

  10. GaussDB技术解读系列:高安全之密态等值

    本文分享自华为云社区< DTCC 2023专家解读 | GaussDB技术解读系列:高安全之密态等值>,作者:GaussDB 数据库. 近日,在第14届中国数据库技术大会(DTCC2023 ...