Golang里泛型使用方法简介
最新的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