当前位置: 首页 > news >正文

golang 1.24引入alias types的原因

在 golang 1.24 版本引入的 alias types,为类型创建别名。

它们是什么,以及我们为什么需要它们。

1、大量的数据,大量的代码

Go是为大规模编程而设计的。大规模编程意味着处理大量数据,但也需要处理大型代码库,许多工程师需要长时间处理这些代码库。

Go将代码组织成包,通过将大型代码库拆分为更小、更易于管理的部分,通常由不同的人编写,并通过公共API连接,实现了大规模编程。在Go中,这些API由包导出的标识符组成:导出的常量、类型、变量和函数。这包括结构的导出字段和类型的方法。

2、重构的需要

随着软件项目随着时间的推移或需求的变化而发展,将代码组织成包的原始组织可能会变得不充分,需要重构。

重构可能涉及将导出的标识符及其各自的声明从旧包移动到新包。这还要求必须更新对移动声明的任何引用,以便它们引用新位置。在大型代码库中,原子地进行这样的更改可能不切实际或不可行;或者说,在一次更改中移动并更新所有客户端是不切实际的或不可行的。

3、阶段性升级

相反,更改必须逐步进行:例如,要“移动”函数F,我们可以将其声明添加到新包中,而不删除旧包中的原始声明。这样,客户端可以随着时间的推移逐步更新。一旦所有调用者都引用了新包中的F,就可以安全地删除F的原始声明(除非为了向后兼容性必须无限期保留)。

4、函数的升级

将函数F从一个包移动到另一个包,同时将其保留在原始包中很容易:只需要一个包装器函数。为了将F从pkg1移动到pkg2,pkg2声明了一个与pkg1.F具有相同签名的新函数F(包装器函数),pkg2.F调用pkg1.F。新调用者可以调用pkg2.F,旧调用者可以调用pkg1.F,但在这两种情况下,最终调用的函数是相同的。

5、常量、变量的升级

移动常数同样简单明了。变量需要更多的工作:可能必须在新包中引入指向原始变量的指针,或者可能使用访问器函数。这不太理想,但至少是可行的。这里的重点是,对于常量、变量和函数,现有的语言特性允许如上所述的增量重构。
但是移动一个类型呢?

6、类型无法升级

在Go中,(限定的)标识符,或简称为名称,决定了类型的身份:由包pkg1定义和导出的类型T不同于由包pkg2导出的T的相同类型定义。此属性使T从一个包移动到另一个包变得复杂,同时在原始包中保留其副本。例如,类型为pkg2.T的值不能分配给类型为pkg1.T的变量,因为它们的类型名称和类型标识是不同的。在增量更新阶段,客户端可能具有这两种类型的值和变量,即使程序员的意图是让它们具有相同的类型。

为了解决这个问题,Go 1.9引入了类型别名的概念。类型别名为现有类型提供新名称,而不引入具有不同标识的新类型。

http://www.dtcms.com/a/315870.html

相关文章:

  • Mac上pnpm的安装与使用
  • 《计算机“十万个为什么”》之 面向对象 vs 面向过程:编程世界的积木与流水线
  • VSCode中使用Qt
  • MySQL 如何优化慢查询
  • Apifox使用mock模仿后端返回数据
  • Java异常讲解
  • PowerShell 入门2: 使用帮助系统
  • 开源密码恢复实用程序 Hashcat 7.0.0 发布
  • 灰色优选模型及算法MATLAB代码
  • 2025年6月中科院2区-红杉优化算法Sequoia Optimization Algorithm-附Matlab免费代码
  • vscode 关闭自动更新
  • ELK是什么
  • 数学建模-线性规划。
  • 数学建模算法-day[15]
  • ubuntu24安装vulkan-sdk
  • golang实现支持100万个并发连接(例如,HTTP长连接或WebSocket连接)系统架构设计详解
  • 【单板硬件】基于AD的单板硬件设计
  • 剑指offer第2版:字符串
  • DAY 36 复习日
  • 【深度学习新浪潮】TripoAI是一款什么样的产品?
  • MinIO01-入门
  • 自抗扰ADCR--跟踪微分器的作用
  • 【unitrix】 7.3 二进制整数 带进位加法实现(int_add.rs)
  • 【2025WACV-目标检测方向】
  • uniapp 类似popover气泡下拉框组件
  • 21 - 大模型智能体进阶指南 (5):电影助手的知识革命:从静态存储到实时进化 —— 检索增强与自主学习的协同机制
  • 防水防尘防摔性能很好的智能三防手机,还有22000mAh大电池
  • 云平台监控-Zabbix企业级高级应用
  • Cisco 3750X交换机更新到IOS 15.2后无法启动 提示:Boot process failed...
  • 水库雨水情测报和大坝安全监测系统解决方案