跳过正文
  1. 全部/
  2. 笔记/
  3. 面试/
  4. golang/

泛型

目录
func sumGeneric[T int | float64](numbers []T) T {
    var total T
    for _, num := range numbers {
        total += num
    }
    return total
}

泛型为Go语言引入了三个重要的新特性:

  1. 支持在函数和类型定义中使用类型参数,使其更加通用。
  2. 扩展了接口的概念,使其可以表示一组类型的集合,不再局限于方法集。
  3. 引入智能类型推导机制,在很多场景下可以省略显式的类型参数。

类型也可以使用泛型
#

要使用泛型类型,必须进行实例化。

type List[T any] []T

type Pair[K comparable, V any] struct {
    Key   K
    Value V
}

type Node[T any] struct {
    next  *Node[T]
    value T
}
type Vector []int32


func MultiplyEach[E constraints.Integer](s []E, factor E) []E
MultiplyEach(Vector{1,2,3}, 3)
->MultiplyEach([]int32, int32) []int32


func MultiplyEach[S ~[]E, E constraints.Integer](s S, factor E) S
MultiplyEach(Vector{1,2,3}, 3)
->MultiplyEach(Vector, int32) Vector

S ~[]E 的意思是:

函数接受所有底层类型是 []E 的切片, 并且返回同样的类型 S, 这样就不会丢失自定义类型(如 Vector)。

Reply by Email