Golang:Go 1.23 版本新特性介绍

news2025/2/11 14:02:15

流行的编程语言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.coloradmin.cn/o/2296351.html

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

相关文章

在 PyTorch 中理解词向量,将单词转换为有用的向量表示

你要是想构建一个大型语言模型,首先得掌握词向量的概念。幸运的是,这个概念很简单,也是本系列文章的一个完美起点。 那么,假设你有一堆单词,它可以只是一个简单的字符串数组。 animals ["cat", "dog…

deepseek API 调用-python

【1】创建 API keys 【2】安装openai SDK pip3 install openai 【3】代码: https://download.csdn.net/download/notfindjob/90343352

Git、Github和Gitee完整讲解:丛基础到进阶功能

第一部分:Git 是什么? 比喻:Git就像是一本“时光机日记本” 每一段代码的改动,Git都会帮你记录下来,像是在写日记。如果出现问题或者想查看之前的版本,Git可以带你“穿越回过去”,找到任意时间…

相对收益-固定收益组合归因-加权久期归因模型

固定收益组合归因-加权久期归因模型和Campisi模型 1 加权久期归因模型--推导方式11.1 债券策略组合收益率的分解1.1.2 加权久期归因(1)总久期贡献(2)债券类属配置贡献 1.1.3 如何应用加权久期归因 2 加权久期归因模型--推导方式22…

原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力

原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力 在科技飞速发展的当下,人工智能与操作系统的融合正深刻改变着我们的数字生活。近日,原生鸿蒙版小艺APP成功接入DeepSeek-R1,这一突破性进展不仅为用户带来了更智…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)

文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8(例如en…

傅里叶单像素成像技术研究进展

摘要:计算光学成像,通过光学系统和信号处理的有机结合与联合优化实现特定成像特性的成像系统,摆脱了传统成像系统的限制,为光学成像技术添加了浓墨重彩的一笔,并逐步向简单化与智能化的方向发展。单像素成像(Single-Pi…

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的? MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

padding: 20rpx 0rpx 20rpx 20rpx(上、右、下、左的填充(顺时针方向))

CSS样式 padding: 20rpx 0rpx 20rpx 20rpx; 用于设置元素的填充区域。以下是对每个值的详细解释: 20rpx(上边距):设置元素顶部的填充为20rpx。0rpx(右边距):设置元素右侧的填充为0rpx。20rpx&a…

微信小程序如何使用decimal计算金额

第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图,清晰易懂形象直观,记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》, 文章链接:https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…

C++模板编程——typelist的实现

文章最后给出了汇总的代码,可直接运行 1. typelist是什么 typelist是一种用来操作类型的容器。和我们所熟知的vector、list、deque类似,只不过typelist存储的不是变量,而是类型。 typelist简单来说就是一个类型容器,能够提供一…

数据可视化与交互融合:APP 界面设计的新维度

在数字化浪潮汹涌的当下,APP 已成为人们生活和工作中不可或缺的工具。如何在众多 APP 中脱颖而出,界面设计至关重要。而数据可视化与交互的融合,正为 APP 界面设计开辟了全新的维度。 数据可视化,简单来说,就是将复杂…

控制论与信息论:维纳和香农的核心分歧在于对「信息本质」的理解

控制论与信息论:维纳和香农的核心分歧在于对「信息本质」的理解 核心结论 控制论是「系统的方向盘」,通过反馈调节实现目标信息论是「信息的尺子」,量化信息传输的精度与效率根本分歧:维纳认为信息是「系统维持秩序的工具」&…

Baklib优化数字化内容管理用科技提升商业效率与增值潜力

内容概要 在当今数字化迅速发展的时代,数字化内容管理已成为企业提升竞争力的重要手段。Baklib作为一款强大的智能优化内容管理系统,通过先进的科技手段,帮助企业在内容管理和数据整合方面实现高效运作。Baklib 是什么类型的工具&#xff0c…

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码及效果展示

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码示例,使用Arduino语言: 硬件连接 INMP441 VCC → ESP32的3.3VINMP441 GND → ESP32的GNDINMP441 SCK → ESP32的GPIO 17INMP441 WS → ESP32的GPIO 18INMP441 SD → ESP32的GPIO 16RG…

利用二分法进行 SQL 时间盲注

什么是时间盲注? SQL 盲注(Blind SQL Injection)是一种常见的 Web 安全漏洞,其中时间盲注是基于查询延迟的 SQL 注入方式。当服务器不返回可见的错误信息时,我们可以利用 SLEEP() 函数来判断查询结果是否符合预期。 …

基于STM32的声纹识别智能门锁

一、项目背景与意义 行业痛点:传统指纹锁存在表皮磨损识别失败风险,声纹具备活体检测特性 技术优势: - 采用MFCC(梅尔频率倒谱系数)替代传统FFT,提升说话人特征区分度 - 动态时间规整(DTW)算法解决语…

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在…