章节

13.3 泛型切片

本篇学习泛型切片类型与方法,并能为不同元素类型复用切片处理逻辑。

泛型切片

概念说明

泛型切片可以把“元素类型”抽象成类型参数。
这样同一份切片处理逻辑可以用于 []int[]string 等不同元素类型。

语法/规则

  1. 可以定义 type List[T any] []T 表示泛型切片。
  2. 方法接收者要写成 func (list List[T]) Method() ...
  3. 返回零值时,可以使用 var zero T
  4. 如果需要比较元素,类型参数要使用 comparable 约束。
  5. 如果只读取和返回元素,any 通常就够用。

泛型切片示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import "fmt"

type List[T any] []T

func (list List[T]) First() (T, bool) {
	var zero T // 用来表示 T 的零值
	if len(list) == 0 {
		return zero, false
	}
	return list[0], true
}

func main() {
	numbers := List[int]{1, 2, 3}
	names := List[string]{"go", "gin"}

	firstNumber, _ := numbers.First()
	firstName, _ := names.First()

	fmt.Println(firstNumber)
	fmt.Println(firstName)
}

输出结果:

1
2
1
go

常见错误

  1. 空切片取第一个元素时没有判断长度,导致索引越界。
  2. 需要比较元素时仍使用 any,导致无法使用 ==
  3. 忘记处理零值,导致空切片场景返回值不明确。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字