go泛型什么时候出

go泛型2022年出。Golang团队认为在类型系统和运行时的复杂性花费太大,还没找到可以和这个复杂性相抵的良好设计。内置的map和slice其实都有泛型的味道,加上可以用interface{}来构造容器,可以达到泛型的效果。所以目前为止还没有直接的支持泛型。Java语言泛型:在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换。而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

重磅: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 语言没有泛型?

Go 语言没有泛型的原因有两个。第一个原因是泛型和其他特性一样不是只有好处,为编程语言加入泛型会遇到需要权衡的两难问题。语言的设计者需要在编程效率、编译速度和运行速度三者进行权衡和选择,编程语言要选择牺牲一个而保留另外两个。第二个原因是目前的多数泛型提案都有明显的缺陷,而且在 1.x 版本中,提升语言其他方面性能带来的收益比泛型带来的更多 。