Golang:Go 1.23 版本新特性介绍

流行的编程语言Go已经发布了1.23版本,带来了许多改进、优化和新特性。在Go 1.22发布六个月后,这次更新增强了工具链、运行时和库,同时保持了向后兼容性。

Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面,以下是具体介绍1:
在这里插入图片描述

语言特性

  • 新的迭代器语法:for-range 循环中现在可以使用迭代器函数作为 range 表达式,如 func (func (K) bool)。开发者能够为任意序列创建自定义迭代器,增强了 Go 语言处理复杂数据结构时的灵活性和表达力。标准库的 slices 和 maps 包也添加了支持迭代器的新功能,提升了数据操作效率。
  • 泛型类型别名预览:Go 1.23 包含对泛型类型别名的预览支持。启用 GOEXPERIMENT=aliastypeparams 后,可在包内使用泛型类型别名,但跨包使用暂不支持。这是 Go 语言在类型系统上的重大突破,使开发者能创建通用类型,减少重复代码,提高代码复用性。
  • 明确包级变量初始化次序:Go 1.23 修正了包级变量初始化次序问题,保持与 Go 1.22 之前的版本一致,但 go spec 中尚未就此给出明确说明。
  • 术语澄清与规范:对 “严格可比较” 和 “类型约束” 等术语进行澄清,修改关于 “类型参数是接口” 的说明以避免混淆,禁止匿名接口类型的循环定义。

工具链改进

  • 遥测系统:引入可选的遥测系统,用于收集 Go 工具链的使用情况和错误统计。通过 go telemetry on 命令可以启用该系统,默认不开启,有助于了解 Go 工具链的使用情况和效果,优化未来版本的开发方向。
  • Go 命令改进
    • go env -changed:显示与默认值不同的环境变量设置,方便开发者追踪和管理环境依赖。
    • go mod tidy -diff:提供预览 go.mod 和 go.sum 文件变更的功能,无需实际修改文件,便于开发者提前评估更改影响。
    • go vet 增强:现在可以报告对于目标 Go 版本来说过新的符号,有助于开发者在向新版本迁移时发现问题并及时解决。

标准库更新

  • 新增包
    • iter 包:支持迭代器相关功能,增强对复杂数据结构的处理能力。
    • structs 包:定义用于修改结构体属性的标记类型,简化结构体操作。
    • unique 包:提供工具用于实现值的 interning,提高内存使用效率。
  • 方法新增与优化
    • slices 包新增 Repeat 方法:该方法会返回一个新的切片,将所提供的切片按给定的次数进行重复。
    • os.DirFS 方法:返回以目录 dir 为根的文件树的文件系统(fs.FS),再结合 os.CopyFS 方法可以实现一次性的递归复制文件和目录。
    • panic 函数改进:panic 函数会用制表符缩进错误信息的第二行和后续行,以区别于第一个 goroutine 的堆栈跟踪。
    • net.http 标准库新增方法:新增 ParseCookie 和 ParseSetCookie 方法,用于从 Cookie 标头字符串中提取 Cookie 结构体,使得处理 Cookie 变得更加方便和直接。
  • time 包优化:改进了 time.Timer 和 time.Ticker 的实现,提高了时间相关操作的性能和准确性。

其他改进

  • 编译器优化:通过重叠函数中局部变量的栈帧槽位,减少了栈的使用,并通过 Profile Guided Optimization(PGO)改善了编译时间,386 和 amd64 架构上的 PGO 性能得到提升。
  • 链接器限制:链接器现在不允许使用 //go:linkname 指令引用未标记 //go:linkname 的标准库内部符号,除非这些符号已有较大使用量。
  • 操作系统要求:Go 1.23 开始要求 macOS 11 Big Sur 或更高版本,是最后一个支持 Linux 2.6.32 及更高版本的发行版,Go 1.24 将要求 Linux 3.17 或更高版本。
  • 架构相关:引入了新的环境变量 GOARM64 和 GORISCV64,用于指定 ARM64 和 RISC-V 目标架构版本,增加了对 64 位 RISC - V 架构的 OpenBSD(openbsd/riscv64)的实验性支持。

总结

Go 1.23是一个强大的更新,增强了语言的功能,优化了性能,并引入了开发人员会发现有用的新工具和特性。无论你是对尝试新的语言特性感兴趣,还是对利用最新的工具链改进感兴趣,Go 1.23都有适合你的特性。Go团队一如既往地鼓励开发人员探索新特性并提供反馈,以帮助塑造语言的未来。

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

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

相关文章

无界构建微前端?NO!NO!NO!多系统融合思路!

文章目录 微前端理解1、微前端概念2、微前端特性3、微前端方案a、iframeb、qiankun --> 使用比较复杂 --> 自己写对vite的插件c、micro-app --> 京东开发 --> 对vite支持更拉跨d、EMP 方案--> 必须使用 webpack5 --> 很多人感觉不是微前端 --> 去中心化方…

webGL

WebGL:3D图形的网络标准 WebGL(Web Graphics Library)是一种3D绘图协议,它允许开发者在不需要任何插件的情况下,在网页浏览器中创建交互式2D和3D效果。WebGL是基于OpenGL ES的JavaScript API,它可以为HTML5…

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…

RabbitMQ深度探索:死信队列

死信队列产生背景: RabbitMQ 死信队列俗称 备胎队列:消息中间件因为某种原因拒收该消息后,可以转移到私信队列中存放,死信队列也可以有交换机和路由 key 等 生产死信队列的原因: 消息投递到 MQ 存放,消息已…

蓝桥算法基础2

位运算 按位与,x&1x%2.因为1不论和几位二进制与,都只有最后一位为1,前面都是0,那么&前面也都为0,只有最后一位,若为1那么2的0次方为1,该数一定为奇数,与取余结果同&#xff…

【Android】版本和API对应关系表

目录 版本和API对应关系表 不积跬步,无以至千里;不积小流,无以成江海。要沉下心来,诗和远方的路费真的很贵! 版本和API对应关系表 版本名版本号名称APIAndroid 1616.0W36Android 1515.0V35Android 1414.0U34Android 1…

B站自研的第二代视频连麦系统(上)

导读 本系列文章将从客户端、服务器以及音视频编码优化三个层面,介绍如何基于WebRTC构建视频连麦系统。希望通过这一系列的讲解,帮助开发者更全面地了解 WebRTC 的核心技术与实践应用。 背景 在文章《B站在实时音视频技术领域的探索与实践》中&#xff…

redis之AOF持久化过程

流程图 在redis.conf文件中配置appendonly为yes则开启aof持久化机制 #开启aof持久化,默认关闭为no appendonly no也可以在命令行开启 aof刷盘策略 #每个写操作都会同步刷盘。 appendfsync always #执行命令后先放入aof缓冲区,每秒钟将缓冲区数据刷盘…

力扣.623. 在二叉树中增加一行(链式结构的插入操作)

Problem: 623. 在二叉树中增加一行 文章目录 题目描述思路复杂度Code 题目描述 思路 1.首先要说明,对于数据结构无非两大类结构:顺序结构、链式结构,而二叉树实质上就可以等效看作为一个二叉链表,而对于链表插入一个节点的操作是应…

DeepSeek与人工智能的结合:探索搜索技术的未来

云边有个稻草人-CSDN博客 目录 引言 一、DeepSeek的技术背景 1.1 传统搜索引擎的局限性 1.2 深度学习在搜索中的优势 二、DeepSeek与人工智能的结合 2.1 自然语言处理(NLP) 示例代码:基于BERT的语义搜索 2.2 多模态搜索 示例代码&…

js精彩代码集锦

收集一些基础的、精彩的JavaScript代码片段。 查找算法 二分查找(适用于有序数据)O(logn) // 从中间开始,查找元素x,比x小,从右侧元素找 const find function (arr, findEl) {let min 0let count 0let max arr.l…

【LeetCode力扣】1.(简单)两数之和(JavaScript)

两数之和: 题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重…

安卓7以上抓包证书安装

安卓7以上抓包证书安装 fiddler 用户可以直接试试这个文件 前提是要root过了,如果是模拟器就很容易开启 前提:要有openssl工具,在linux一个指令就可以下载了:sudo apt-get install openssl,windons则是在https://www.openssl.org/…

【GoLang】切片的面试知识点

nil切片 和 空切片 nil切片是只声明但未初始化,没有分配底层数组的内存空间, 空切片是初始化了的,有分配数组内存,只是数组内没有元素。 二者都可以正常扩容、遍历。不会报错。 append 如何添加切片 append 可以增加切片&…

利用 IMU 估计人体关节轴向和位置 —— 论文推导

Title: 利用 IMU 估计人体关节轴向和位置 —— “Joint axis and position estimation from inertial measurement data by exploiting kinematic constraints” —— 论文推导 文章目录 I. 论文回顾II. 铰接关节的约束1. 铰接关节约束的原理2. 铰接关节约束的梯度3. 铰接关节约…

JVM图文入门

往期推荐 【已解决】redisCache注解失效,没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…

利用ETL工具进行数据挖掘

ETL的基本概念 数据抽取(Extraction):从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作,从API接口拿取数据也是。 数据转换(Transformation):清洗、整合和转…

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程

超详细UE4(虚幻4)第一人称射击(FPS)游戏制作教程 引言 在游戏开发领域,第一人称射击(FPS)游戏一直是最受欢迎的类型之一。从经典的《反恐精英》(CS)到现代的《使命召唤》(Call of Duty),FPS游戏凭借其紧张刺激的游戏体验和高度沉浸感,吸引了无数玩家。如果你是一…

MySQL数据库(五)索引

一 索引概述 1 介绍:MySQL索引是一种有序数据结构,它能够高效帮助数据库系统快速定位到表中的特定记录,从而显著提高查询效率。索引可以被看作是书的目录,通过它可以迅速找到所需的信息而不需要逐页翻阅整本书。 2 优缺点 二 索…

LeetCode 5

最长回文子串 动态规划 d p [ i ] [ j ] d p [ i 1 ] [ j − 1 ] a n d s [ i ] s [ j ] dp[i][j] dp[i1][j-1] \ \ and \ \ s[i]s[j] dp[i][j]dp[i1][j−1] and s[i]s[j] 长串依赖短串的状态。 所以枚举长度的时候从大到小。 const int N 1010; class Solu…