原文在这里

由 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. Linux 概念:u-boot

    U-Boot介绍 参考:https://baike.baidu.com/item/U-Boot/10377075 参考:https://u-boot.readthedocs.io/en/latest/ ...

  2. PlayWright(二十二)- allure插件(一)

    在上文中,我们介绍并使用了pytest-html插件,总之并不复杂,但是今天我们要讲一个比pytest-html插件强很多的插件allure报告,我们要掌握他并且灵活使用,之后的框架就不需要考虑其他的 ...

  3. error: failed to push some refs to 'https://gitee.com/xxxxxxxxx/xxxxxxxt'

    原因是ReadMe文件不在本地中, 此时我们要执行git pull --rebase origin master命令README.md拉到本地, 任何然后执行git push origin maste ...

  4. 新一代开源流数据湖平台Apache Paimon入门实操-上

    @ 目录 概述 定义 核心功能 适用场景 架构原理 总体架构 统一存储 基本概念 文件布局 部署 环境准备 环境部署 实战 Catalog 文件系统 Hive Catalog 创建表 创建Catalo ...

  5. 从ABNF读懂HTTP协议格式

    定义 HTTP(Hyper Text Transfer Protocol)超文本传输协议 HTML( Hyper Text Markup Language)超文本标记语言 URI(Uniform Re ...

  6. 实现无限存储:基于JuiceFS 创建 Samba 和 NFS 共享

    随着企业数据量的持续增长,存储容量需求日益增大.如何采用没有容量上限的云存储替换本容量有限的本地磁盘,已成为广泛的需求和共识.特别是在企业中常用的 Samba 和 NFS 共享,如果能够使用云存储作为 ...

  7. MySQL查询语句的执行过程

    SQL语句的查询过程 文章源自:极客时间-MySQL核心知识45讲 1. 前言 先看一张图和一个简单的SQL查询语句:select * from T where ID=10; 2. 概述 大体来说,M ...

  8. Thinkphp 5.x 远程代码执行漏洞利用小记

    Thinkphp 5.x远程代码执行漏洞存在于Thinkphp 5.0版本及5.1版本,通过此漏洞,可以在远程执行任意代码,也可写入webshell 下面是对其进行的漏洞利用! 漏洞利用: 1,利用s ...

  9. python爬虫抓取图片

    一.什么是爬虫 什么是爬虫?爬虫是蜘蛛么?是八爪鱼么?nonono. 爬虫是指请求网站并获取数据的自动化程序,又称网页蜘蛛或网络机器,最常用领域是搜索引擎,最常用的工具是八爪鱼. 它的基本流程分为以下 ...

  10. 记录一次解决数据库连接池连接泄露BUG

    1 BUG现象 系统并发请求,系统停滞无法使用,所有接口都是无法与后端进行交互的状态,系统并没有宕机 2 BUG的业务流程 插入分数方法 涉及插入表ABCD 加了声明式事务 查询分数方法 涉及表ABC ...