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.rhkb.cn/news/189887.html

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

相关文章

【数据结构与算法】JavaScript实现单向链表

文章目录 一、单向链表简介二、封装单向链表类2.0.创建单向链表类2.1.append(element)2.2.toString()2.3.insert(position,element)2.4.get(position)2.5.indexOf(element)2.6.update(position,element)2.7.removeAt(position)2.8.其他方法2.9.完整实现 一、单向链表简介 链表…

Tomcat学习

一、入门 在webapp里面必须先创建一个文件夹,文件夹里面放的内容,才会被访问到。 创建一个javaweb项目后 二、servlet 1.概述 2.servlet生命周期 3.servlet实例的创建时机 4.Servlet实例的初始化参数 5.HTTP状态码 6.servelet返回JSON数据 7.fa Servel…

C语言——个位数为 6 且能被 3 整除但不能被 5 整除的三位自然数共有多少个,分别是哪些?

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j0;for(i100;i<1000;i) {if(i%106&&i%30&&i%5!0){printf("%6d",i); j;}}printf("\n一共%d个\n",j);return 0; } %6d起到美化输出格式的作用&#xff…

C语言基础篇4:变量与存储

1 局部变量和全局变量 在介绍局部变量和全局变量前&#xff0c;先了解一些关于作用域方面的内容。作用域的作用就是决定程序中的哪些语句是可用的&#xff0c;换句话说&#xff0c;就是程序中的可见性。作用域有局部作用域和全局作用域&#xff0c;那么局部变量就具有局部作用域…

代码随想录算法训练营第四十九天丨 动态规划part12

309.最佳买卖股票时机含冷冻期 思路 相对于动态规划&#xff1a;122.买卖股票的最佳时机II (opens new window)&#xff0c;本题加上了一个冷冻期 在动态规划&#xff1a;122.买卖股票的最佳时机II (opens new window)中有两个状态&#xff0c;持有股票后的最多现金&#xf…

NSS [HUBUCTF 2022 新生赛]checkin

NSS [HUBUCTF 2022 新生赛]checkin 判断条件是if ($data_unserialize[username]$username&&$data_unserialize[password]$password)&#xff0c;满足则给我们flag。正常思路来说&#xff0c;我们要使序列化传入的username和password等于代码中的两个同名变量&#xff0…

番外 1 : Java 环境下的 selenium 搭建

Java 环境下的 selenium 搭建 一 . 下载谷歌浏览器二 . 下载谷歌浏览器驱动2.1 查看谷歌浏览器版本2.2 下载对应版本的谷歌驱动2.3 解压下载好的驱动压缩包 , 将下载好的 chromedriver.exe 放到java 系统环境变量下 三 . 下载 Edge 浏览器的驱动3.1 查看 Edge 浏览器的版本3.2 …

k8s的Init Containers容器实现代码版本升级发布和deployment版本回退:实战操作版

Pod中的初始化容器&#xff1a;Init Containers initContainers实现理论前提:同一个Pod内的容器共享 网络、volume等资源 Init Containers 在Kubernetes中&#xff0c;init容器是在同一个Pod中的其他容器之前启动和执行的容器。它的目的是为Pod上托管的主应用程序执行初始化…

洛谷P9388 [THUPC 2023 决赛] 先人类的人类选别(主席树+权值线段树)

题目 思路来源 P9388 [THUPC 2023 决赛] 先人类的人类选别 - 违规用户名FkZyA0!2 的博客 - 洛谷博客 题解 这个题是2023ccpc深圳热身赛的题目&#xff0c;也是thupc2023决赛的题目&#xff0c; 学弟问了一下&#xff0c;于是就乱搞了一下&#xff0c;搞了很久才a&#xff0…

Linux ____03、文件类型、属性、修改文件属性(更改文件权限)(命令)

文件类型、属性、修改文件属性 一、文件类型二、文件属性三、修改文件属性1、chgrp&#xff1a;更改文件属组2、chown&#xff1a;更改文件属主&#xff0c;也可以同时更改文件属组3、chmod&#xff1a;更改文件9个属性————————如觉不错&#xff0c;随手点赞&#xff…

微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?

背景&#xff1a;小程序真机调试的时候&#xff0c;发现真机的network不显示接口调用情况&#xff0c;控制台也没有输出内容。具体如下所示&#xff1b; 解决方法&#xff1a; 1、确保手机端连接的网络和微信开发者工具网络一致&#xff0c;比如用同一个WiFi 2、真机自动调试…

编程知识\_C与汇编深入分析

1. 汇编怎么调用C函数 1.1 直接调用 bl main 1.2 想传参数怎么办&#xff1f; 在arm中有个ATPCS规则(ARM-THUMB procedure call standard&#xff08;ARM-Thumb过程调用标准&#xff09;。 约定r0-r15寄存器的用途&#xff1a; r0-r3 调用者和被调用者之间传参数 r4-r11 函…

Flink SQL自定义标量函数(Scalar Function)

使用场景&#xff1a; 标量函数即 UDF&#xff0c;⽤于进⼀条数据出⼀条数据的场景。 开发流程&#xff1a; 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数&#xff0c;名称必须叫做 eval&#xff0c;eval ⽅法签名必须是 p…

冒泡排序

贵阳这个地方的天气变化好大呀&#xff0c;前两天晒大太阳&#xff0c;今天就冷的脚抖&#xff0c;简直不要太冷&#xff0c;但是不管怎么样&#xff0c;还是要学习的哟&#xff01; 冬天来了&#xff0c;春天确实还有一点远&#xff01; 好了&#xff0c;话不多说&#xff0c;…

springboot rocketmq 延时消息、延迟消息

rocketmq也有延迟消息&#xff0c;经典的应用场景&#xff1a;订单30分钟未支付&#xff0c;则取消的场景 其他博客提到从rocketmq5.0开始&#xff0c;支持自定义延迟时间&#xff0c;4.x只支持预定义延迟时间&#xff0c;安装rocketmq可参考RocketMq简介及安装、docker安装ro…

【C++】模板初阶

目录 一&#xff0c;泛型编程 二&#xff0c;函数模板 1&#xff0c;函数模板概念 2&#xff0c;函数模板格式 3&#xff0c;函数模板的原理 4&#xff0c;函数模板的实例化 5&#xff0c;模板参数的匹配原则 三&#xff0c;类模板 1&#xff0c;类模板的定义格式 2&…

⑤ 【MySQL】DCL语句 —— 用户管理、权限控制

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL用户与权限 ⑤ 【MySQL】DCL语句 —— 用…

pytorch中对nn.BatchNorm2d()函数的理解

pytorch中对BatchNorm2d函数的理解 简介计算3. Pytorch的nn.BatchNorm2d()函数4 代码示例 简介 机器学习中&#xff0c;进行模型训练之前&#xff0c;需对数据做归一化处理&#xff0c;使其分布一致。在深度神经网络训练过程中&#xff0c;通常一次训练是一个batch&#xff0c…

U-Mail邮件系统安全登录解决方案

企业邮箱是企业对内对外商务往来的主要通信工具&#xff0c;并且企业邮箱里面还包含了大量企业内部隐私信息、商业机密等&#xff0c;很容易成为黑客的攻击目标。其中邮件盗号是企业邮箱遭受攻击的主要形式&#xff0c;一旦企业邮箱密码被黑客盗取&#xff0c;黑客不仅可以利用…

操作系统 | 虚拟机及linux的安装

​ &#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 目录结构 1.操作系统实验之虚拟机及linux的安装 1.1 实验目的 1.2 实验内容 1.3 实验步骤 …