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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

证明串口是好的

前提:客户返回来一个pad,说串口不好用,售后让研发确定一下串口好不好用。 pad的串口是usb口(不知道这样说对不对),然后就一个“usb--9针”的线。 要确定串口好不好,首先要从电脑发数据给pad&a…

牛客网上收藏题目总结及重写(C语言)(3)

每日一言 如果预计中的不幸没有发生的话&#xff0c;我们就会收获意外的喜悦。 --人生的智慧 题目BC84 错因&#xff1a;忘记要使用小数除法 代码 #include <stdio.h> int main() {int i 0;int n 0;scanf("%d",&n);double sum 0;for(i1;i<n;i){su…

如何用自然语言 5 分钟构建个人知识库应用?我的 GPTs builder 尝试

开发者的想象力闸门一旦打开&#xff0c;迎接我们的必然是目不暇接的 AI 应用浪潮冲击。 兴奋 早晨&#xff0c;我突然发现 ChatGPT 最新的 Create GPTs 功能可以用了。 这太让我意外了&#xff0c;没想到这么快。根据页面上的提示&#xff0c;我一直以为还得等上一周左右。于是…

跨境电商商城源码:实现多语言、多货币、多商户入驻的全面解决方案

随着全球电子商务的迅猛发展&#xff0c;越来越多的商家和消费者选择在跨境电商平台上进行交易。为了满足不同国家和地区的需求&#xff0c;多语言、多货币、多商户入驻已成为跨境电商平台的核心竞争力。本文将为您介绍如何通过跨境电商商城源码实现这些功能&#xff0c;帮助您…

qt系统自带的对话框

QMessageBox是静态成员函数可以直接通过类名进行访问 参数四是两个按钮的类型 第五个参数是回车默认选择的按键&#xff0c;该函数返回值是案件类型 其他标准对话框

react脚手架create-react-app创建react项目

1.全局安装 create-react-app winR/桌面目录下cmd进入终端页面 npm i -g create-react-app2.create-react app 初始化项目 create-react-app 项目名称项目初始化完成 运行项目 目录下cmd控制台输入 npm start然后打开本地服务运行项目查看

学会这10个Fluent仿真优化技巧,效率蹭蹭蹭

ANSYS Fluent 是计算流体动力学 (CFD) 仿真的强大工具&#xff0c;使工程师和科学家能够分析和预测各种应用中的流体行为。然而&#xff0c;运行模拟可能需要大量计算&#xff0c;因此优化设置对于在最短的时间内获得最准确的结果非常重要。 Fluent对电脑配置要求高&#xff1f…

服务号怎么升级订阅号

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;首先我们要看一下服务号和订阅号的主要区别。1、服务号推送的消息没有折叠&#xff0c;消息出现在聊天列表中&#xff0c;会像收到消息一样有提醒。而订阅号推送的消息是折叠的&#xff0c;“订阅号…

世微 升压恒压IC dc-dc转换器 充电器手持设备便携式产品 AP8660

AP8660是一款升压dc-dc转换器&#xff0c;内置MOS调节器&#xff0c;内部补偿&#xff0c;还可以最小6个外部组件&#xff0c;内部的软识启动功能可以降压涌入电流 AP8660 SOT23-6封装&#xff0c;可以为PCB提供节省空间 特点 可调输出&#xff0c;最高达到24W 内部固定PWM频…

CCF ChinaSoft 2023 论坛巡礼 | 生成式AI与软件自动化论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

css实现鼠标悬停时元素的显示与隐藏

css实现鼠标悬停时元素的显示与隐藏 跟着B站黑马学习小兔鲜项目&#xff0c;有个点记录一下 就是当鼠标悬浮在商品列表上时&#xff0c;列表中的商品会显示出来&#xff0c;离开时&#xff0c;商品隐藏&#xff0c;如下&#xff1a; 感觉这个功能经常会遇到&#xff0c;但一直…

MATLAB中ginput函数用法

目录 语法 说明 示例 标识点和绘制坐标 返回用于选择坐标的按键 标识地理坐标区上的点 ginput函数的功能是标识坐标区坐标。 语法 [x,y] ginput(n) [x,y] ginput [x,y,button] ginput(___) 说明 [x,y] ginput(n) 可用于标识笛卡尔坐标区、极坐标区或地理坐标区内…

docker简易入门(极简,纯干货)

简介 Docker是一种容器化平台&#xff0c;它可以用来轻松地创建、部署和运行应用程序和服务。Docker使用容器技术来管理应用程序的运行环境&#xff0c;它将应用程序和服务打包到一个易于移植的容器中&#xff0c;然后在任何地方运行这个容器&#xff0c;无需担心不同环境之间…

一篇文章带你全面了解地埋一体机(雨水净化消毒一体机)

一、地埋一体机&#xff08;雨水净化消毒一体机&#xff09; 此设备集雨水过滤、消毒、排污于一体&#xff0c;通过六向阀手柄位置切换可实现过滤、消毒、反冲洗、排污等不同功能。 二、产品参数 三、产品功能介绍 地埋一体机由不锈钢壳体、砂缸、六向阀、消毒装置等部分组成。…

2023年CKA考试真题及注意事项

2023年CKA考试真题及注意事项 注意事项考试题目原题解析1.RBAC2.节点维护3.K8S组件升级 1.28.0升级到1.28.14.Etcd备份与恢复5.NetworkPolicy6.Service7.Ingress8.指定节点部署9.检查Node节点健康状态10.一个Pod多个容器11.监控Pod度量指标12.监控Pod日志13.PersistentVolumeCl…

淘宝开放平台订单接口免申请审核接入规则

大家都知道&#xff0c;想要实现自动化批量获取淘宝的商品订单数据&#xff0c;离不开淘宝开放平台API接口。想要获取API调用权限&#xff0c;需要经过淘宝开放平台的严苛审核流程。并且&#xff0c;现在平台基本不开放新的应用权限了。像很多做ERP的公司&#xff0c;他们的客户…

Qt 线程串口

文章目录 ui设置创建线程函数初始串口run函数接收发送数据读取数据处理读取的数据写入数据写入启动的命令 主线程 ui设置 创建线程函数 #include <QObject> #include <QThread> #include <QSerialPort> #include <QSerialPortInfo>class SerialPort :…

Leetcode刷题详解——解数独

1. 题目链接&#xff1a;37. 解数独 2. 题目描述&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能…

微信小程序_02

能够使用WXML模版语法渲染页面结构 数据绑定 1、数据绑定的基本原则 在data中定义数据在WXML中使用数据 2、在data中定义页面的数据 ​ 在页面对应的.js文件中&#xff0c;把数据定义到data对象中即可&#xff1a; Page({data:{//字符串类型的数据info:init data,//数组类…

【python自动化】Playwright基础教程(七)Keyboard键盘

【python自动化】Playwright基础教程(七)Keyboard键盘 playwright模拟键盘操作 键盘事件提供了用于管理虚拟键盘的API&#xff0c;高级API是keyboard.type()&#xff0c;它使用的是原始字符再页面上生成对应的keydown 、 keypress / input 和 keyup 事件。 模拟真实键盘操作进行…