Go 14周年
原文在这里。
由 Russ Cox, for the Go team 发布于2023年11月10日
今天,我们庆祝Go开源发布的第十四个生日!Go在过去一年里取得了巨大的进展,发布了两个功能丰富的版本,并实现了其他重要的里程碑。
我们发布了Go 1.20 in February和Go 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引入了新的cmp、maps和slices包,这是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周年的更多相关文章
- 【周年庆】china-pub 14周年庆感恩回馈四波狂热来袭
活动主题:china-pub 14周年庆感恩回馈四波狂热来袭活动说明:[第1波]电子书免费抢!10万好书 65折封顶! 活动规则: 1.活动期间内凡 ...
- Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析
Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...
- 《CODE》读后笔记——第14~20章
14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...
- 实践GTD三周年后的体会
从2011年7月开始实践GTD到现在已经3年多了,按照年初设定的目标,应该写点GTD的体会,但提起笔来的时候却发现并没有什么太新的体会,大部分体会都已经在以前的文章中写到了,甚至有些流程已经简化了,看 ...
- 《C++程序设计语言(十周年纪念版)》【PDF】下载
<C++程序设计语言(十周年纪念版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382171 内容简介 <C++程序设计 ...
- 机械革命 x7ti-s 1周年使用报告
2017年11月19日在京东入手一台机械革命x7ti-s(https://item.jd.com/5048818.html)当时各种优惠返现什么的最终8399.5到手(是1060显卡的机械版).前几周 ...
- Win10一周年纪念版,瞧一瞧Linux子系统
Bash Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令.Bash还能从文件中读取命令,这样的文件称为脚本.和其他Unix shell 一样,它支持文件名替换(通配符匹配) ...
- 【LGR-048 五周年庆贺】洛谷6月月赛
Luogu的五周年庆典比赛,还是比较满意的. 题目清新不毒瘤,数据优质不卡常,解法自然,为出题人点赞. 前三题的难度都很低,T5个人感觉还好.但是最后那个splay+hash是什么神仙东西. 最后好像 ...
- GTD实践2周年后一些体会
从2011年7月1日算起,实践GTD已经有2年多了,在GTD一周年时写了<用iPhone打造GTD实践1周年的心得体会>这篇文章,随着实践的深入,如今又有了一些新的认识,2013年初制定的 ...
- eoLinker上线两周年+ AMS V4.0 发布:全新UI界面,带来领先的API开发管理解决方案!
2018年7月,eoLinker 发布了<eoLinker AMS 2018年年中用户调研问卷>,前后经历一周的时间,共收集到超过1000份有效调查问卷.超过300个有效改进意见. eoL ...
随机推荐
- CPU摸鱼被抓,上了一个新技术!
我叫阿Q,是CPU一号车间里的员工,我所在的这个CPU足足有8个核,就有8个车间,干起活来杠杠滴. 我们CPU的任务就是执行程序员编写的程序,只不过程序员编写的是高级语言代码,而我们执行的是这些代码被 ...
- SpringBoot 启动流程分析(寻找扩展点)
1.SpringBoot maven 依赖版本 <?xml version="1.0" encoding="UTF-8"?> <project ...
- Vue中 router与route的区别
$route对象 该对象表示当前的路由信息,包含当前URL解析得到的信息.包含当前的路径,参数,query对象等.其常用方法如下所示: $route.path 字符串,对应当前路由的路径,总是解析为绝 ...
- 【工具】-Misc-Python-dsstore
介绍 这是一个.DS_Store解析工具. 什么是.DS_Store .DS_Store 是 Desktop Services Store 的缩写,是 macOS 操作系统上的一个不可见文件,只要您使 ...
- 从一些常见的错误聊聊mysql服务端的关键配置
背景 每一年都进行大促前压测,每一次都需要再次关注到一些基础资源的使用问题,订单中心这边数据库比较多,最近频繁报数据库异常,所以对数据库一些配置问题也进行了研究,本文给出一些常见的数据库配置,说明这些 ...
- k8s发布应用
前言 首先以SpringBoot应用为例介绍一下k8s的发布步骤. 1.从代码仓库下载代码,比如GitLab: 2.接着是进行打包,比如使用Maven: 3.编写Dockerfile文件,把步骤2产生 ...
- 使用KRPano资源分析工具强力加密JS文件
本文地址:http://www.cnblogs.com/reachteam/p/6294767.html 软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278 ...
- 5分钟入门 next13
上半年vercel 推出了nextjs13 这个大版本,刚好最近有个c端的项目,所以就用了这个框架来写,技术体系基本也是文档提到的 tailwindcss + ts + swr + ssr ,总的来开 ...
- paramiko免密登陆
paramiko免密登陆 # -*- coding: utf-8 -*- import paramiko pkey='D:/pycharm_workspace/testpy/ssh_paramiko_ ...
- IO流知识汇总(不断更新)
BIO.NIO.AIO有什么区别? BIO.NIO.AIO是Java中用于处理IO的三种不同的方式,它们之间的区别如下: BIO(Blocking IO):同步阻塞IO,传统的IO模型,也称为传统IO ...