大家好,我是IT工匠。 Go1.18 的泛型是闹得沸沸扬扬,虽然之前写过很多篇针对泛型的一些设计和思考。但因为泛型的提案之前一直还没定型,所以就没有写完整介绍。 如今已经基本成型,就由煎鱼带大家一起摸透 Go 泛型。本文内容主要涉及泛型的 3 大概念,非常值得大家深入了解。 如下: 类型参数。 类型约束。 类型推导。 类型参数 类型参数,这个名词。不熟悉的小伙伴咋一看就懵逼了。 泛型代码是使用抽象的数据类型编写的,我们将其称之为类型参数。当程序运行通用代码时,类型参数就会被类型参数所取代。也就是类型参数是泛型的抽象数据类型。 简单的泛型例子: func Print(s []T) { for _, v := range s { fmt.Println(v) } } 代码有一个 Print 函数,它打印出一个片断的每个元素,其中片断的元素类型,这里称为 T,是未知的。