写点什么

Go 1.24 带来泛型类型别名、弱指针,并改进了终结器

作者:Sergio De Simone

  • 2025-03-12
    北京
  • 本文字数:1127 字

    阅读完需:约 4 分钟

Go 1.24 带来泛型类型别名、弱指针,并改进了终结器

Go 语言在最新版本 1.24 中引入了几个重要的特性,包括泛型类型别名、弱指针,并改进了终结器等。它还增强了 map 默认实现、小对象分配以及互斥锁处理的运行时性能。


Go 语言的类型别名为现有类型提供了一个同义词,这非常有助于提高可读性和简洁性。现在,Go 1.24 允许为泛型类型创建类型别名。也就是说,类型别名可以指定一个类型参数。


type ComparableVector[T comparable] = Vector[T]type ComparableVectorOfInts = ComparableVector[int]type ThisWouldBeAnError = ComparableVector[[]int]
复制代码


这里有必要回顾一下,Go 提供了一种类似的语法,用于在现有类型的基础上定义新类型,例如 type NewInt int。尽管语法的差别只是少了=,但由于 NewInt 不能代替 int,所以影响还是很大的。


有趣的是,对于是否引入泛型类型别名及其对语言的影响,有关讨论已经持续了三年多。


弱指针不会增加对象的引用计数。当一个对象只被弱指针引用时,垃圾回收器就可以释放它。因此,在尝试使用弱指针的值之前,应检查它是否为 nil


var strongInt int = 5var weakInt *intweakInt = &strongInt...weakInt.Value()
复制代码


在实现对象缓存等功能时,弱指针可能很有用,因为它可以避免对象仅仅因为包含在缓存中而被保留下来。


Go 终结器的作用是在对象被垃圾回收时进行清理。在 Go 1.24 之前,这项工作可以使用 [runtime.SetFinalizer](https://tip.golang.org/pkg/runtime#SetFinalizer)来完成,但有几个需要注意的事项,包括:无法在同一个对象上定义多个终结器;终结器对涉及引用循环的对象不起作用,等等。为了克服这些限制,Go 1.24 提供了一个新的运行时函数 AddCleanup,用于为对象注册清理函数:


runtime.AddCleanup(objPointer, cleanupFunc, resourceToCleanUp)...func cleanupFunc(resourceToCleanUp CleanUpArgType) { ...}
复制代码


该清理机制解决了上述终结器问题。此外,它还能确保所有的清理函数都在单独的 goroutine 中顺序调用。


如前所述,Go 1.24 改进了 map 的运行时性能。特别是,它采用 SwissTable 作为实现 map的基础,并使用并发 hash-trie 来实现 sync.Map


使用 SwissTable,大型 map 的访问和分配速度提高了 30%,预设大小 map 的分配速度提高了 35%,迭代速度提高了 10% 到 60%,具体取决于 map 中数据项的多少和大小。


同样,采用并发 hash-trie 后,在几乎所有基准测试中,新的 sync.Map 实现都击败了旧实现。


Go 1.24 包含的改进和更改远不止这些,其中还包括:字节包和字符串包中新增的函数、ommitzero json 标签、目录受限的文件系统访问等。虽然发布说明一如既往地简洁,但你可以观看 Reddit 用户 GreenTowel3732 发布在 YouTube 上的精彩视频概述。


原文链接:


https://www.infoq.com/news/2025/02/go-1-24-generic-aliases/

2025-03-12 11:497

评论

发布
暂无评论

社交语聊平台运营,需要哪些资质?语聊APP原生开发和混合uniapp开发的利弊分析

山东布谷科技胡月

语音聊天系统软件开发 语音直播平台开发 语音聊天室开发 语音程序源码 社交直播APP开发

常用的国内外组态软件推荐

2D3D前端可视化开发

物联网 组态软件 工业组态软件 web组态软件 SCADA

Last Week in Milvus

Zilliz

非结构化数据 开源社区 Milvus Zilliz 向量数据库

一张图读懂TuGraph Analytics开源技术架构

TuGraphAnalytics

大数据 分布式 流计算 图计算 流图

2023年科技趋势展望报告,这几个领域程序员可以恰饭

互联网工科生

人工智能 软件开发 麦肯锡

国内智慧工业的实践,在一首曙光《长歌行》中

脑极体

AI 算力 数智化 曙光

避雷干货丨初创或中小企业公司该如何选择云服务器?

YG科技

我是如何使用Spring Retry减少1000 行代码

越长大越悲伤

Java spring retry spring-retry

融云:AI 机器人在社交软件中的花样存在

融云 RongCloud

AI 融云 社交软件 AIGC My AI

图智能在反洗钱方向的应用实践丨Fabarta 技术专栏

Fabarta

图计算 图分析 反洗钱 图智能 智能风控

代码随想录Day48 - 动态规划(九)

jjn0703

什么是HTTP代理?HTTP代理的作用?HTTP代理怎么设置?

巨量HTTP

代理IP IP地址 http代理 socks5代理

一文看懂:小程序游戏需要版号吗?

FN0

九科信息成功签约中交房地产集团有限公司RPA项目

九科Ninetech

云服务之PaaS:PaaS怎么帮助企业走向云

高端章鱼哥

云计算 低代码 PaaS JNPF

ARTS 薪火重启之第二周

渣渣辉

C++头文件和std命名空间

芯动大师

几款常用基于Web的组态编辑器

2D3D前端可视化开发

物联网 web组态 web组态软件 组态可视化 web组态编辑器

如何将数据从 InfluxDB 无缝接入到 TDengine 中?来看看

TDengine

tdengine Influxdb 时序数据库

k8s发布应用

tiandizhiguai

微服务 云原生 k8s

Kyligence Copilot 登陆海外,斩获 Product Hunt 日榜 TOP 2

Kyligence

指标平台 Kyligence Copilot 数据分成

首批通过!柏睿数据旗下数据库产品获强制性国标最高级别认证

新消费日报

唯一受邀参会通信服务商!融云出席数字经济头部盛会「中数大会」并发言

融云 RongCloud

人工智能 互联网 通信 数字 融云

电商店铺管理,为何需要华为云云耀云服务器L实例

YG科技

FuncGPT(慧函数)教你用Mybatis进行一对一查询映射处理

飞算JavaAI开发助手

走进大模型

统信软件

人工智能 深度学习 大模型

融云深度参与「新加坡 GTLC 大会」,连接亚太机遇、开拓国际市场

融云 RongCloud

通信 服务 融云 GTLC 东南亚

以财证道,终身成长

少油少糖八分饱

读书笔记 思维 搞钱 致富 有钱人

Go 1.24 带来泛型类型别名、弱指针,并改进了终结器_编程语言_InfoQ精选文章