golang 范型总结(其一)

本文是关于范型的一些比较浅层的,常用的应用总结

本文涉及到interface的类型约束,范型与类型约束几乎是密不可分,可以参考

Golang interface总结(其一)-CSDN博客

然后是版本问题,go1.18及之后才能正常使用范型编程

总的来讲范型的使用就是类型约束 + 类型参数的使用

范型结构体、范型类型、范型函数

范型结构体

type Object[T int | float64] struct {
    Money T
}

范型类型

这里只距离一个map类型,切片、管道之类的,就不写了

type MyMap[Key int | float64, Value interface{}] map[Key]Value

范型函数

可以看到中括号中,就是类型参数

type MyNumber interface {
	int | float64
}

func Sum[MyNum MyNumber](a, b MyNum) T {
	return a + b
}

其实这些都可以称为约束

自定义类型的约束

type TestS struct {
	age int
}
 
func (t TestS) TestS1() {
	fmt.Println(1111111)
}
 
func (t TestS) speak() {
	fmt.Println(22222)
}
 
type TestI interface {
	speak()
	TestS
}
 
func TestIFunc[TestIType TestI](t TestIType) {
	fmt.Println(33333333)
}

这里就是只允许TestS实现TestI

接口约束

type TestA interface {
	TestS2()
}

type TestI interface {
	speak()
	TestA
}

没什么好说的,实现TestI必须要实现TestA

这里需要注意,在使用interface约束类型的时候,无法对带有方法的接口做联合约束,也就是


 
type TestI interface {
	speak()
	TestA | int
}
 

不可以这样写,编译不过去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值