章节

13.4 泛型 map

本篇学习泛型 map 的键值约束,并能定义可复用的字典类型。

泛型 map

概念说明

map 的 key 必须可比较。
因此定义泛型 map 时,key 的类型参数通常要使用 comparable 约束。

value 的类型限制通常更宽,可以使用 any
这样就能复用一套获取、设置、判断存在的逻辑。

语法/规则

  1. 泛型 map 可写成 type Dict[K comparable, V any] map[K]V
  2. K comparable 表示 key 可以使用 ==!=
  3. V any 表示 value 可以是任意类型。
  4. 读取 map 时建议返回 value, ok,区分不存在和零值。
  5. 写入前要确保 map 已初始化。

泛型 map 示例

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

import "fmt"

type Dict[K comparable, V any] map[K]V // K 要能比较,才能作为 map key

func (dict Dict[K, V]) Get(key K) (V, bool) {
	value, ok := dict[key]
	return value, ok
}

func main() {
	ages := Dict[string, int]{
		"abin": 21,
	}

	age, ok := ages.Get("abin")
	fmt.Println(age, ok)
}

输出结果:

1
21 true

常见错误

  1. key 类型参数没有写 comparable,导致无法作为 map key。
  2. 读取 map 只接收一个返回值,无法区分键不存在和零值。
  3. 只声明 var dict Dict[string, int] 就直接写入,可能因为底层 map 未初始化而 panic。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字