golang 泛型的格式写法
Go语言中的泛型(Generics)是在 Go 1.18 版本中引入的一个重要特性,它允许你编写可重用的代码,而不需要为每种数据类型重复编写相同的逻辑。
泛型通过参数化类型(type parameters)来实现,使得函数、方法、接口和结构体可以与多种类型一起工作。
下面详细介绍Go语言中泛型的基本格式和用法:
泛型函数的基本格式如下:
func functionName[TypeParameters constraints](arguments) returnType { // 函数体 }
functionName: 是泛型函数的名字。
TypeParameters: 是类型参数列表,放在函数名后的方括号中,用逗号分隔多个类型参数。每个类型参数代表一个待定的类型。
constraints: 是类型约束,可选,用来限制类型参数可以被哪些具体类型实例化。它可以是一个预定义的约束如any(表示可以是任何类型),或者是自定义的接口约束。
arguments: 是函数的参数列表,与非泛型函数相同。
returnType: 是函数的返回类型,同样可以是泛型类型。
类型约束用来限制类型参数可以被哪些类型实例化。
你可以使用预定义的约束,如 any(等同于空接口interface{},可以匹配任何类型),或者定义自己的接口约束。
自定义类型约束的示例:
type MyConstraint interface { // 这里列出约束条件,比如必须实现的方法 SomeMethod() } func MyFunction[T MyConstraint](t T) { // 函数体 }
【实例】
假设我们要编写一个泛型的 Max 函数,它可以接受两种类型的参数并返回较大的那个:
https://github.com/farwish/go-lab/blob/master/syntax/T.go
在这个例子中,comparable 是一个预定义的约束,表示这个类型参数需要是一个可以比较的类型,比如基本的数值类型、字符串等。