Go 14岁了

news/2024/11/19 11:42:47/

4690cfe4346350b3377c8bf446edd172.jpeg

今天我们庆祝Go开源十四周年!Go度过了美好的一年,发布了两个功能齐全的版本和其他重要的里程碑。

我们在2月份发布了Go 1.20,在8月份发布了Go 1.21,更多地关注实现改进而不是新的语言更改。

在Go 1.20中,我们预览了配置文件引导优化(PGO),并在Go 1.21中正式发布。PGO允许Go编译器读取程序的配置文件,然后花更多时间优化程序中最常运行的部分。在启用PGO后,Go 1.21中的工作负载的CPU使用率通常会提高2%到7%。有关概述,请参阅“Go 1.21中的配置文件引导优化”,有关完整文档,请参阅配置文件引导优化用户指南。

自从Go 1.2以来,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 Toolchains”。

另一个重要的工具成就是将磁盘索引集成到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系统接口(WASI)预览版1上运行。WASI预览版1是Wasm的新“操作系统”界面,大多数服务器端Wasm环境都支持。请参阅“Go中的WASI支持”了解演练。

在安全方面,我们将继续确保Go在帮助开发人员了解其依赖项和漏洞方面处于领先地位,并于7月推出Govulncheck 1.0。如果您使用VS Code,则可以使用Go扩展直接在编辑器中运行govulncheck:请参阅本教程以开始使用。如果您使用GitHub,则可以使用govulncheck的GitHub Action将govulncheck作为CI/CD的一部分运行。有关检查依赖项是否存在漏洞问题的更多信息,请参阅今年的Google I/O演讲“使用Go和Google构建更安全的应用程序”。

另一个重要的安全里程碑是Go 1.21的高度可重复的工具链构建。有关详细信息,请参阅“完美再现、经过验证的Go工具链”,包括在Mac上再现Ubuntu Linux Go工具链而不使用任何Linux工具的演示。

这是忙碌的一年!

在Go的第15个年头,我们将继续努力使Go成为大规模软件工程的最佳环境。我们特别兴奋的一项变化是重新定义for循环的:=语义,以消除意外别名错误的可能性。有关详细信息,请参阅“修复Go 1.22中的For循环”,包括在Go 1.21中预览此更改的说明。

谢谢你!Go项目一直不仅仅是我们Google Go团队的成员。感谢我们所有的贡献者和Go社区中的每个人,是你们让Go成为今天的样子。我们祝愿您在新的一年里一切顺利。

GopherChina 2023上海站 

快点击阅读原文报名吧~~


http://www.ppmy.cn/news/1211602.html

相关文章

Python----元组的定义与使用

1、为什么需要元组 思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做? 首先,列表可以一次性存储多个数据,但是列表中的数据允许更改。 相关链接:Python--列表及其应用场景-CS…

Leetcode刷题详解——优美的排列

1. 题目链接:526. 优美的排列 2. 题目描述: 假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm(下标从 1 开始),只要满足下述条件 之一 ,该数组就是一个 优美的排列 : perm[i] 能够被…

Python之文件与文件夹操作及 pytest 测试习题

目录 1、文本文件读写基础。编写程序,在 当前目录下创建一个文本文件 test.txt,并向其中写入字符串 hello world。2、编写一个程序 demo.py,要求运行该程序后,生成 demo_new.py 文件,其中内容与demo.py 一样&#xff0…

安装包 amd,amd64, arm,arm64 都有什么区别

现在的安装包也不省心,有各种版本都不知道怎么选。 根据你安装的环境配置。 amd: 32位X86 amd64: 64位X86 arm: 32位ARM arm64: 64位ARM amd64是X86架构的CPU,64位版。amd64又叫X86_64。主流的桌面PC&am…

ArcGIS10.8 连接 PostgreSQL 及遇到的两个问题

前提 以前同事用过我的电脑连PostgreSQL,失败了。当时不知道原因,只能使用GeoServer来发布数据了。现在终于搞明白了,原因是ArcGIS10.2版本太老,无法连接PostgreSQL9.4。参考这里 为了适应时代的发展,那我就用新的Ar…

AJAX基础

<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>AJAX</title> </head> <body> <!-- 什么是AJAX 定义AJAX是异步的JavaScript和XML&#xff0c; 简单点说&#xff0c;就是XMLHttpRequest对…

java 继承和多态 (图文搭配,万字详解!!)

目录 1.继承 1.1 为什么需要继承 1.2 继承概念 1.3 继承的语法 1.4 父类成员访问 1.4.1 子类中访问父类的成员变量 1.4.2 子类中访问父类的成员方法 1.5 super关键字 1.6 子类构造方法 1.7 super和this 1.8 再谈初始化 1.9 protected 关键字 1.10 继承方式 1.11 f…

Interactive Analysis of CNN Robustness

Interactive Analysis of CNN Robustness----《CNN鲁棒性的交互分析》 摘要 虽然卷积神经网络&#xff08;CNN&#xff09;作为图像相关任务的最先进模型被广泛采用&#xff0c;但它们的预测往往对小的输入扰动高度敏感&#xff0c;而人类视觉对此具有鲁棒性。本文介绍了 Pert…