首先,泛型是把"类型"当做参数传进来

官方一些的解释:

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性

由于Go v2版本后才可能出泛型,所以我先拿Typescript的泛型来说明下

我们再回来看golang中的,interface{},它本身就是叫做空接口,本身就是类型,如果interface{}是泛型,那么其在使用的时候可以指定类型,但是我们在使用中是这么转换类型的

这个是基于interface{}本身结构体里面eface字段所决定的类型int,也就是当我们初始化a这个interface{}的时候,并且赋值是int 1的时候,那么已经决定了这个interface底层eface里面是个int

再做个实验

可以看出,interface{}是被动根据所赋值的类型来决定其类型,不能主动指定(会编译错误),但是泛型是主动获得所代表的类型

既然interface{}是被动的,那么当我在编译的时候,除非发生主动指定类型的情况,其他情况都是在运行期间才能知道interface{}的具体底层类型

但是对于泛型而言,因为是要主动得知类型的,所以在编译的时候,编译器就可以找出类型的问题出来了,也就是编译器在编译的时候,就已经知道这个泛型使用的时候,类型是否符合约束,进而做出判断