Go,14周年[译]

国内的双十一购物狂欢已没有了当年的那种热闹与喧嚣,但大洋彼岸的Go团队却始终保持稳中有增的开发和语言演进节奏。今晨Go核心团队的Russ Cox[1]代表Go语言项目团队在Go官博上发表了《Fourteen Years of Go》[2]的博文,纪念Go语言开源14周年[3],并对2023年以来Go语言的演进进行了归纳总结,并对Go在其第15个年头将要做的改进给予了很高的期望。这里对博文做简单翻译,供大家参考。


今天,我们欢庆Go语言开源发布十四周年[4]!Go在过去一年中取得了巨大的进步,发布了两个功能特性丰富的版本,并达成了其他一些重要的里程碑。

我们在2月发布了Go 1.20[5],在8月发布了Go 1.21[6],在这两个版本中,我们更多地关注实现改进而不是新语言特性。

我们在Go 1.20版本中发布了Profile-guided optimization(PGO)功能的预览版[7],并在Go 1.21中正式发布了该功能[8],它允许Go编译器读取程序的Profile,然后花更多时间对程序中运行最频繁的部分进行优化。在Go 1.21中,启用PGO后,工作负载的CPU使用率通常可以提高2%到7%。关于PGO的介绍请参阅“Go 1.21中的Profile-guided optimization[9]”,对PGO的全面说明请参阅“PGO用户指南[10]”。

Go从Go 1.2版本开始[11]就支持在go test期间收集覆盖率profile数据。Go 1.20版本增加了对go build构建的二进制文件收集测试覆盖率profile数据的支持,这样你就可以在集成测试期间收集测试覆盖率数据,详情请参阅“Go集成测试的代码覆盖率[12]”。

兼容性一直是Go的重要组成部分[13],我们最初对兼容性的承诺始于“Go 1和Go程序的未来[14]”这篇文章。针对那些可能会给现有程序造成破坏但又必须要修正的重要错误,Go 1.21版本通过扩展GODEBUG的约定用法进一步改进了兼容性。请参阅博文“后向兼容性,Go 1.21和Go 2[15]”了解概况,详情请参阅文档“Go、后向兼容性和GODEBUG[16]”。

Go 1.21还发布了对内置工具链管理的支持,允许你像改变其他依赖的版本一样轻松地改变特定模块(module)中使用的Go工具链版本。请参阅博文“Go 1.21中的向前兼容性和工具链管理[17]”,更多详情请参阅文档“Go工具链[18]”。

另一个在工具链方面的重要成就是将磁盘索引集成到gopls(Go语言服务器)。这将gopls的启动延迟和内存使用缩短了3-5倍。“扩展gopls以适应不断增长的Go生态系统[19]”一文解释了其中的技术细节。你可以通过运行以下命令确保运行最新的gopls:

$go install golang.org/x/tools/gopls@latest

Go 1.21引入了新的cmp[20]、maps[21]和slices[22]包 —— Go的第一个泛型标准库 —— 以及扩展了可比较类型(comparable)的集合。详情请参阅博文“所有可比较的类型[23]”。

总体而言,我们继续完善泛型,并通过会议演讲和撰写博文来解释重要细节。今年两篇值得关注的博文是“分解类型参数[24]”和“关于类型推断你一直想知道的事情 —— 以及更多[25]”。

Go 1.21中另一个重要的新包是log/slog[26],它为标准库添加了结构化日志[27]的官方API。请参阅“使用slog实现结构化日志[28]”了解概况。

在对WebAssembly(Wasm)的移植方面,Go 1.21增加了在WebAssembly System Interface(WASI) preview1版本上运行的支持。WASI preview1是一种新的“操作系统”接口,支持大多数服务器端的Wasm环境。详情请参阅“Go对WASI的支持[29]”一文。

在安全方面,我们将继续确保Go在帮助开发人员了解其依赖关系和漏洞方面处于领先地位,7月发布的Govulncheck 1.0[30]正是这样的例子。如果你使用VS Code,可以通过Go扩展直接在编辑器中运行govulncheck。请参阅govulncheck IDE教程[31]了解如何开始使用govulncheck。如果你使用GitHub,可以使用GitHub Action for govulncheck[32]将运行govulncheck作为CI/CD流程的一部分。有关检查依赖项漏洞问题的更多信息,请参阅今年的Google I/O大会的演讲“使用Go和Google构建更安全的应用程序[33]”。

另一个重要的安全里程碑是Go 1.21的高度可重现的工具链构建。详情请参阅“完全可重现的经验证的Go工具链[34]”,包括在没有使用任何Linux工具的情况下在Mac上重现Ubuntu Linux Go工具链的演示。

这是非常繁忙的一年!

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

感谢!

Go项目一直远不止我们在Google的Go小组。感谢所有贡献者和Go社区中的每一个人,使得今天的Go成为可能。我们衷心祝愿大家在未来一年中一切顺利。


“Gopher部落”知识星球[36]旨在打造一个精品Go学习和进阶社群!高品质首发Go技术文章,“三天”首发阅读权,每年两期Go语言发展现状分析,每天提前1小时阅读到新鲜的Gopher日报,网课、技术专栏、图书内容前瞻,六小时内必答保证等满足你关于Go语言生态的所有需求!2023年,Gopher部落将进一步聚焦于如何编写雅、地道、可读、可测试的Go代码,关注代码质量并深入理解Go核心技术,并继续加强与星友的互动。欢迎大家加入!

b86053125b4d497a4df480314014572a.jpeg04e35093010b2291be2928839e96872b.png

0267eebcb47438b29cd54374be626826.pngbc9d6d9a24d1a39ac81bcfdaa089adae.jpeg

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址[37]:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) - https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx

  • 微博2:https://weibo.com/u/6484441286

  • 博客:tonybai.com

  • github: https://github.com/bigwhite

  • Gopher Daily归档 - https://github.com/bigwhite/gopherdaily

42a0b2818053eb95dedb1b1b9cee78c1.jpeg

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

参考资料

[1] 

Russ Cox: https://swtch.com/~rsc/

[2] 

《Fourteen Years of Go》: https://go.dev/blog/14years

[3] 

Go语言开源14周年: https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html

[4] 

Go语言开源发布十四周年: https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html

[5] 

Go 1.20: https://tonybai.com/2023/02/08/some-changes-in-go-1-20/

[6] 

Go 1.21: https://tonybai.com/2023/08/20/some-changes-in-go-1-21/

[7] 

Go 1.20版本中发布了Profile-guided optimization(PGO)功能的预览版: https://go.dev/blog/pgo-preview

[8] 

在Go 1.21中正式发布了该功能: https://go.dev/blog/pgo

[9] 

Go 1.21中的Profile-guided optimization: https://go.dev/blog/pgo

[10] 

PGO用户指南: https://go.dev/doc/pgo

[11] 

从Go 1.2版本开始: https://go.dev/blog/cover

[12] 

Go集成测试的代码覆盖率: https://go.dev/blog/integration-test-coverage

[13] 

兼容性一直是Go的重要组成部分: https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule/

[14] 

Go 1和Go程序的未来: https://go.dev/doc/go1compat

[15] 

后向兼容性,Go 1.21和Go 2: https://go.dev/blog/compat

[16] 

Go、后向兼容性和GODEBUG: https://go.dev/doc/godebug

[17] 

Go 1.21中的向前兼容性和工具链管理: https://go.dev/blog/toolchain

[18] 

Go工具链: https://go.dev/doc/toolchain

[19] 

扩展gopls以适应不断增长的Go生态系统: https://go.dev/blog/gopls-scalability

[20] 

cmp: https://go.dev/pkg/cmp/

[21] 

maps: https://go.dev/pkg/maps/

[22] 

slices: https://go.dev/pkg/slices/

[23] 

所有可比较的类型: https://go.dev/blog/comparable

[24] 

分解类型参数: https://go.dev/blog/deconstructing-type-parameters

[25] 

关于类型推断你一直想知道的事情 —— 以及更多: https://go.dev/blog/type-inference

[26] 

log/slog: https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go

[27] 

结构化日志: https://tonybai.com/2023/09/04/slog-in-action-file-logging-rotation-and-kafka-integration/

[28] 

使用slog实现结构化日志: https://go.dev/blog/slog

[29] 

Go对WASI的支持: https://go.dev/blog/wasi

[30] 

Govulncheck 1.0: https://tonybai.com/2022/09/10/an-intro-of-govulncheck

[31] 

govulncheck IDE教程: https://go.dev/doc/tutorial/govulncheck-ide

[32] 

GitHub Action for govulncheck: https://github.com/marketplace/actions/golang-govulncheck-action

[33] 

使用Go和Google构建更安全的应用程序: https://www.youtube.com/watch?v=HSt6FhsPT8c&ab_channel=TheGoProgrammingLanguage

[34] 

完全可重现的经验证的Go工具链: https://go.dev/blog/rebuild

[35] 

在Go 1.22中修复For循环: https://go.dev/blog/loopvar-preview

[36] 

“Gopher部落”知识星球: https://public.zsxq.com/groups/51284458844544

[37] 

链接地址: https://m.do.co/c/bff6eed92687

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FCOS难点记录

FCOS 中有计算 特征图(Feature map中的每个特征点到gt_box的左、上、右、下的距离) 1、特征点到gt_box框的 左、上、右、下距离计算 x coords[:, 0] # h*w,2 即 第一列y coords[:, 1] l_off x[None, :, None] - gt_boxes[..., 0][:, No…

编程艺术之源:深入了解设计模式和设计原则

深入了解设计模式和设计原则 一、认识设计模式1.1、设计模式是什么?1.2、设计模式是怎么来的?1.3、设计模式解决了什么问题? 二、设计模式的基础2.1、面向对象思想2.2、设计原则 三、如何学习设计模式3.1、明确目的3.2、学习步骤 总结 一、认…

Linux服务器从零开始训练 RT-DETR 改进项目 (Ultralytics) 教程,改进RTDETR算法(包括使用训练、验证、推理教程)

手把手从零开始训练 RT-DETR 改进项目 (Ultralytics版本) 教程,改进RTDETR算法 本文以Linux服务器为例:从零开始使用Linux训练 RT-DETR 算法项目 《芒果剑指 RT-DETR 目标检测算法 改进》 适用于芒果专栏改进RT-DETR算法 文章目录 百度 RT-DETR 算法介绍改进网络代码汇总第…

CAD Exchanger SDK 有什么新内容?

CAD 交换器 3.23.0,2023 年 11 月强调:- 添加了新版本格式的导入:Autodesk Inventor 2023 和 2024、NX 2306。- 文档经过重大修改,使其更易于导航。它也是现在包含有关 SDK、Web Toolkit 和 Manufacturing Toolkit 的全面信息&…

SQL 存储过程优化

问题:一个复杂的6个表的left jion 语句,发现设置为定时任务后最高时长为18分钟 1、原因分析:对复杂SQL 进行拆分验证 发现是合同明细表和 产品表的left jion 时间过长,发现 合同明细表每天为3w条,之前做过优化 对每个…

(1)(1.14) LightWare SF10/SF11激光雷达

文章目录 前言 1 串行连接 2 I2C 连接 3 参数说明 前言 Lightware SF20 和 LW20 是体积小、测距远(100m)、精度高的测距仪。有两种型号,LW20/Ser 使用串行接口,LW20/I2C 使用 I2C 接口。 1 串行连接 对于串行连接&#xff0…

软件开发项目文档系列之十六如何撰写系统运维方案

前言 项目运维方案是为了确保项目的稳定运行和可持续发展而制定的指导性文档。本文将详细介绍项目运维方案的各个方面,包括硬件和软件基础设施、监控和警报、备份和恢复、安全性、团队组织和沟通等方面。本博客将提供示例和最佳实践,以帮助您更好地理解…

一些分享| 在线笔记、GIF图片生成方法

文章目录 在线笔记视频转GIF 本片博客旨在挖掘一些好用且免费的在线平台,持续更新中~ 正所谓科技解放双手,使用在线平台可以方便快捷地学习办公,节省时间。 在线笔记 语雀 https://www.yuque.com/dashboard 语雀是笔者用得最长最久的平台了…

Leetcode—102.二叉树的层序遍历【中等】

2023每日刷题(二十四) Leetcode—102.二叉树的层序遍历 C语言BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of arr…

Springboot项目部署及多环境开发

一、项目部署 我们之前写的代码都是部署在本地的tomcat上,别人是无法访问我们写的程序的。在实际开发中,我们都要将开发完毕的项目部署到公司的服务器上。 我们的代码需要经过编译打包生成一个jar包,这个过程需要借助一个插件来实现。 创建sp…

【微软技术栈】C#.NET 如何使用本地化的异常消息创建用户定义的异常

本文内容 创建自定义异常创建本地化异常消息 在本文中,你将了解如何通过使用附属程序集的本地化异常消息创建从 Exception 基类继承的用户定义异常。 一、创建自定义异常 .NET 包含许多你可以使用的不同异常。 但是,在某些情况下,如果它们…

STL简介+浅浅了解string——“C++”

各位CSDN的uu们好呀,终于到小雅兰的STL的学习了,下面,让我们进入CSTL的世界吧!!! 1. 什么是STL 2. STL的版本 3. STL的六大组件 4. STL的重要性 5. 如何学习STL 6.STL的缺陷 7.为什么要学习string类 …

pinpoint监控tomcat应用,页面显示No data collected

pinpoint安装部署教程大家都可以搜到。这里就不说了。单说一下 页面没有数据的情况。 部署环境,pinpoint安装部署在A服务器上。现在是在C、D、E、F……linux机器上安装pinpoint-agnet 1. 将文件 pinpoint-agent-1.8.5.tar.gz 上传到 服务器C、D、E、F…… 2. 解压…

第十八章DOM操作控制

DOM操作分类: jQuery中的DOM操作 一。设置和获取样式值 1.追加样式 addClass:追加CSS效果 removeClass:去除CSS内容 2.切换样式 3.判断是否含有指定样式:判断的是布尔类型的值 二。内容操作: 1.HTML代码操作 2.TEXT代…

【算法与设计模式】

一、数据结构与算法 1、算法性能评估 时间复杂度、空间复杂度 2、数据结构 数组与列表 队列 堆栈 链表 二叉树 多叉树 递归算法 二、设计模式 1、单例 (1)GIL:线程互斥锁。保证同一时刻只有一个线程在进行。 (2&#xff09…

Git GUI、SSH协议和IDEA中的Git使用详解

目录 前言 一、Git GUI的使用 1. 什么是Git GUI 2. 常见的Git GUI工具 3.使用 4.使用Git GUI工具的优缺点 优点: 缺点: 二、SSH协议 1.什么是SSH协议 2.SSH的主要特点和作用 3.SSH密钥认证的原理和流程 4. SSH协议的使用 三、IEDA使用git …

js随机生成颜色

封装一个函数 返回一个随机颜色 不传参数或者传true返回十六进制, 传false返回rgb模式 script>function Random(n, m) {if (n > m) {let temp nn mm temp}return Math.floor(Math.random() * (m - n 1)) n}function getRandomColor(flag true) {if (fl…

Linux常用命令——bzip2recover命令

在线Linux命令查询工具 bzip2recover 恢复被破坏的.bz2压缩包中的文件 补充说明 bzip2recover命令可用于恢复被破坏的“.bz2”压缩包中的文件。 bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用b…

桌面图标设置-将“我的电脑”、“控制面板”添加到桌面

桌面图标设置 1、将“我的电脑”、“控制面板”添加到桌面 桌面鼠标右键-个性化-主题-桌面图标设置-勾选”计算机“、”回收站“、”控制面板“-应用-确定-桌面鼠标右键-排序-名称

数据结构 队列(C语言实现)

目录 1.队列的概念及结构2.队列的代码实现 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 1.队列的概念及结构 队列:只允许在…