本文将带你从零开始,理解Go 泛型的概念、语法、使用方式,并配有示例代码,帮助你快速上手。

文章目录 

Go 语言自 1.18 版本起支持 泛型(Generics) ,这让 Go 代码可以更加通用,减少重复代码,提高开发效率。Go 1.24 进一步增强了泛型支持,引入了 泛型类型别名,让代码更简洁。

本文将带你从零开始,理解 Go 泛型的概念、语法、使用方式,并配有示例代码,帮助你快速上手。

什么是泛型?

简单来说,泛型 就是让我们编写可以适用于多种数据类型的代码。换句话说,泛型让你可以定义一个函数或数据结构,它可以处理任何类型的数据,而不需要事先指定类型。你只需要在使用时决定具体的类型。

1. 泛型函数

泛型函数是泛型最基本的应用。它允许你编写一个函数,可以接收任何类型的参数并返回相应的结果。

示例:一个求长度的泛型函数

假设你要写一个求切片长度的函数。没有泛型时,你可能需要为不同类型的切片写不同的函数:

func LengthInt(s []int) int {
    return len(s)
}

func LengthString(s []string) int {
    return len(s)
}

但有了泛型,我们就可以写一个通用的函数来处理不同类型的切片:

func Length[T any](s []T) int {
    return len(s)
}

这里的 T 是泛型类型,它表示函数 Length 可以接受任何类型的切片。any 表示“任何类型都行”。这样,你就可以用它来求任意类型切片的长度了:

sliceInt := []int{1, 2, 3, 4, 5}
sliceString := []string{"a", "b", "c"}

fmt.Println(Length(sliceInt))    // 输出: 5
fmt.Println(Length(sliceString)) // 输出: 3

 title=

2. 泛型结构体

除了函数,结构体 也可以使用泛型。这意味着你可以写一个通用的数据结构,适应不同类型的数据。

阅读全文:Go 语言泛型用法详解 - 阿小信的博客


axiaoxin
9 声望0 粉丝