切换到Go 1.18后的第一件事:将interface{}全部替换为any
随着Go 1.18 beta1版本的发布,开发者们跃跃欲试,迫不及待地下载并体验新特性。在拿到Go 1.18 beta1版本后,很多人可能会问:这一步骤具体指的是什么?答案在于Russ Cox在2021年12月1日对Go语言项目的一次commit,他将Go项目中所有interface{}替换为any。interface{}在Go中是空接口,任何类型的实例都可以赋值给空接口变量。为何Go团队会在Go 1.18 beta1发布前采取此行动?any的引入主要是考虑到Go 1.18引入了泛型后的影响。使用interface{}作为类型参数声明时,会显得冗长,影响开发体验。此外,interface{}在Go 1.18中用于定义类型参数的约束,any的命名与新职责更为匹配。然而,替换并非一蹴而就,有人喜新厌旧,有人则偏爱interface{}的简洁。在Go 1.18中,将interface{}替换为any的做法得到多数Gopher的支持
重磅:Go 1.18将移除用于泛型的constraints包
背景Go官方团队在Go 1.18 Beta 1版本的标准库里引入了contraints包,以支持泛型设计。该包定义了Signed,Unsigned, Integer, Float, Complex和Ordered共6个interface类型,可以用于泛型里的类型约束(type constraint)。例如,使用constraints包可以编写如下泛型代码:函数min是一个泛型函数,接收2个参数,返回其中的较小者。类型参数T的类型约束contraints.Ordered的定义如下。该代码的执行结果为。对于不熟悉Go泛型和constraints包的同学,建议参考之前的教程了解。现状Go官方团队的技术负责人Russ Cox提议将constraints包从Go标准库里移除,放到x/exp项目下。Russ Cox给出的理由包括:仍然存在关于constraints包的疑问,虽然许多人对名称感到满意,但也有许多人不认可
切换到Go 1.18后的第一件事:将interface{}全部替换为any
随着Go 1.18 beta1版本的发布,开发者们跃跃欲试,迫不及待地下载并体验新特性。在拿到Go 1.18 beta1版本后,很多人可能会问:这一步骤具体指的是什么?答案在于Russ Cox在2021年12月1日对Go语言项目的一次commit,他将Go项目中所有interface{}替换为any。interface{}在Go中是空接口,任何类型的实例都可以赋值给空接口变量。为何Go团队会在Go 1.18 beta1发布前采取此行动?any的引入主要是考虑到Go 1.18引入了泛型后的影响。使用interface{}作为类型参数声明时,会显得冗长,影响开发体验。此外,interface{}在Go 1.18中用于定义类型参数的约束,any的命名与新职责更为匹配。然而,替换并非一蹴而就,有人喜新厌旧,有人则偏爱interface{}的简洁。在Go 1.18中,将interface{}替换为any的做法得到多数Gopher的支持
重磅:Go 1.18将移除用于泛型的constraints包
背景Go官方团队在Go 1.18 Beta 1版本的标准库里引入了contraints包,以支持泛型设计。该包定义了Signed,Unsigned, Integer, Float, Complex和Ordered共6个interface类型,可以用于泛型里的类型约束(type constraint)。例如,使用constraints包可以编写如下泛型代码:函数min是一个泛型函数,接收2个参数,返回其中的较小者。类型参数T的类型约束contraints.Ordered的定义如下。该代码的执行结果为。对于不熟悉Go泛型和constraints包的同学,建议参考之前的教程了解。现状Go官方团队的技术负责人Russ Cox提议将constraints包从Go标准库里移除,放到x/exp项目下。Russ Cox给出的理由包括:仍然存在关于constraints包的疑问,虽然许多人对名称感到满意,但也有许多人不认可