Go 1.25为什么要废除核心类型
关于核心类型为什么要1.25里要移除,作者Robert在博客Goodbye core types - Hello Go as we know and love it!里给了详细耐心的解答。
-
背景:Go 1.18 引入了泛型(generics),带来了类型参数(type parameters)、类型约束(type constraints)和类型集(type sets)等概念,同时也引入了**核心类型(core types)**的概念,主要为了简化泛型操作数的处理。
-
核心类型的定义:
-
对普通类型,核心类型就是它的底层类型(underlying type)。
-
对类型参数,若其类型集所有成员拥有相同的底层类型,则该底层类型即为核心类型;否则无核心类型。
-
但在某些操作(如 channel 发送、内置的
append
、copy
)中,实际使用上又不得不对核心类型规则进行放宽,导致复杂且混乱。
-
-
出现的问题:
-
核心类型的要求有时过于严格,导致一些明明合理的操作被禁止(如某些泛型切片操作)。
-
即使在非泛型代码中,也必须了解核心类型才能理解语言规则,增加了学习和使用难度。
-
核心类型使语言规范中本应统一简单的规则出现了不必要的例外,降低了一致性和可扩展性。
-
-
Go 1.25的变化(预计2025年8月发布):
-
将彻底移除核心类型概念。
-
用更直接、具体的规则描述各个语言特性,而不是依赖核心类型。
-
带来的好处包括:
-
降低学习门槛,规范更清晰。
-
非泛型代码不需要了解泛型细节。
-
语言行为更加统一自然,未来扩展也更容易。
-
-
简单说:Go 团队发现核心类型虽然当时是为了方便实现泛型,但从语言设计上是一个累赘,最终决定移除它,让 Go 更简洁统一。