吾八哥博客

您现在的位置是:首页 > 码农手记 > Golang > 正文

Golang

Golang里泛型使用方法简介

吾八哥2022-06-04Golang31820

最新的golang1.18版本以来已经添加了泛型的支持,有了泛型后,以前的一些冗余的代码写法现在可以进行一定的简化,下面简单介绍一些用法!

基础用法

指定数据类型的泛型函数写法:

func showMoney[Money int | float64](m Money) {
	fmt.Println(m)
}

上面的函数指定了函数参数为int或float64类型,多个类型之间使用|来分隔,若传递非指定类型,则无法编译通过,会报如下错误:

./main.go:18:11: string does not implement int|float64 (exit status 2)

若允许传递任意类型,则可以使用any,写法如下:

func showMoney[Money any](m Money) {
	fmt.Println(m)
}

这种时候如果要指定传入参数的类型可以使用如下写法:

...
showMoney[float64](1)
...

简化代码

上面介绍了基础的使用方法,下面来使用泛型来简化下代码的写法,例子如下:

没有泛型的时候的写法:

func MaxInt(x, y int) int {
	if x >= y {
		return x
	}
	return y
}

func MaxFloat32(x, y float32) float32 {
	if x >= y {
		return x
	}
	return y
}

上面的函数是用于获取两个int或float32类型的最大的数,如果再多一种int64类型,就得再多加一个函数,代码显得特别冗余,现在有了泛型,那么简化的写法如下:

func Max[Num int | int64 | float32 | float64 | string](x, y Num) Num {
	if x >= y {
		return x
	}
	return y
}

若要扩充类型也很方便,代码写法明显简化很多!

若要了解更多的泛型的用法,建议阅读官方文档:https://go.dev/doc/tutorial/generics