Go语言中的泛型,你了解多少?-func-- 有没有其他语言的泛型可以借鉴
Go语言中的泛型,你了解多少?
泛型编程让代码更加灵活和可重用,Go语言也在这方面做了很多工作。下面我们就来聊聊Go语言中的泛型,简单易懂地了解一下。一、什么是类型参数?
类型参数是泛型编程的核心。想象一下,你可以把它看作是一个占位符,代表任何具体的类型。下面是一个简单的例子:```go func Sum[T int | float](a, b T) T { return a + b } ``` 这里,`T` 就是一个类型参数,它可以是 `int` 或者 `float`。
二、泛型函数,让函数更通用
泛型函数允许你在函数定义中使用类型参数,这样函数就可以处理多种类型的数据了。比如:```go func Max[T int | float](a, b T) T { if a > b { return a } return b } ``` 这个 `Max` 函数可以用来比较 `int` 和 `float` 类型的值。
三、泛型类型,灵活创建类型
Go语言还允许你定义泛型类型,比如一个通用的栈:```go type Stack[T any] struct { items []T } func (s Stack[T]) Push(item T) { s.items = append(s.items, item) } func (s Stack[T]) Pop() T { item := s.items[len(s.items)-1] s.items = s.items[:len(s.items)-1] return item } ``` 这里,`T` 也是一个类型参数,它可以是任何类型。
四、约束,限制类型参数的范围
约束可以限制类型参数的范围,确保它们满足特定的条件。例如:```go type CanSort[T interface{Sort()}] struct { Items []T } func (cs CanSort[T]) Sort() { // 实现排序逻辑 } ``` 这里,`T` 必须是实现了 `Sort` 方法的类型。