3.3 泛型函数实例化(instantiation)
我们还以 maxGenerics 为例来演示一下这个过程:
maxGenerics([]int{1, 2, -4, -6, 7, 0})
上面代码是对...maxGenerics 泛型函数的一次调用,Go 对这段泛型函数调用代码的处理分为两个阶段,如下图所示:
我们看到,Go 首先会对泛型函数进行实例化(instantiation),即根据自动推断出的类型实参生成一个新函数...我们也可以用一种更形象的方式来描述上述泛型函数的实例化过程。实例化就好比一家生产“求最大值”机器的工厂,它会根据要比较大小的对象的类型将这样的机器生产出来。...另外要注意,当我们使用相同类型实参对泛型函数进行多次调用时,Go 仅会做一次实例化,并复用实例化后的函数,比如:
maxGenerics([]int{1, 2, -4, -6, 7, 0})
maxGenerics...F *P[T2, T1] // 不符合技术方案,但Go 编译器并未报错
}
5.2 使用泛型类型
和泛型函数一样,使用泛型类型时也会有一个实例化(instantiation)过程,比如:
var sl