go_泛型

什么是泛型

在编程语言中,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型

在保证与Go 1完全兼容的情况下,为类型及函数声明增加可选的类型参数来扩展支持泛型函数和类型

类型参数使用接口类型进行约束,并允许在接口类型中内嵌附加元素来指定约束的类型集合

可以通过显式指定类型实参,来实例化泛型类型和函数。为了简洁性,类型推断机制可以在大多数场景下减少甚至
忽略泛型实例化时指定的类型实参个数。

Go中的泛型函数

在这里插入图片描述
如果不使用泛型,想返回很多类型的话就要写很多个类型的函数,这会造成大量的冗余

第 5 行 [T any] 即为类型参数,意思是该函数支持任何类型的 slice 。但是在调用该函数的时候,需要显式指定类型参数类型。如果想用该函数打印字符串 slice,则需要显式指定类型参数为 string, 以帮助编译器实行类型推导。

约束

约束的意思是约束了这个泛型都具有哪些实际类型

[T any],T 表示类型的标识,any 表示 T 可以是任意类型。any 其实就是约束。go内置了很多约束,比如说 any 和 comparable ,意思是任何类型和可以比较的类型。以后应该会有一个新的内置约束的包叫做package constraints 例如any comparable ,Ordered 等等约束都会内置到标准库中。

Go将interface的职责给扩展了,让接口不仅仅作为接口 — 解耦的,抽象化的结构体,还具有了约束,对于类型的约束作用。

在这里插入图片描述
并非所有类型都支持加法操作。因此我们需要给出约束,指定可以进行加法操作的类型。

在这里插入图片描述
增加了一个约束addType

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值