只有可比较类型能作为Go map的键,如基本数值、字符串、布尔、指针、通道、可比较元素的数组和结构体;切片、map和函数类型不可比较,不能作为键。

在 Go 语言中,map 的键类型需要是可比较的(comparable)。也就是说,该类型的值可以使用 == 和 != 操作符进行比较。只有满足这个条件的类型才能作为 map 的键。
以下这些类型都支持相等性判断,因此可以安全地用作 map 的键:
map[string]int、map[int]bool、map[*Person]string 都是合法的。
以下类型是 不可比较的,因此不能用作 map 的键:
立即学习“go语言免费学习笔记(深入)”;
这些类型在 Go 中被定义为不可比较,即使两个 nil 切片或 nil 函数也不允许用于 map 键。
错误示例:map[[]string]int 或 map[map[int]int]string 在编译时报错:“invalid map key type”。
虽然数组 [N]T 可以作为键,但要注意不同长度的数组是不同类型,比如 [2]int 和 [3]int 不兼容。另外,包含不可比较元素的结构体也不能作为键,例如:
type BadKey struct {
Name string
Data []byte // 包含 slice,导致整个 struct 不可比较
}
// map[BadKey]string 会编译失败
基本上就这些。只要记住:能用 == 比较的类型,就能做 map 键;不能比较的,就不能。这是 Go 类型系统的基本规则。
以上就是Golangmap的键可以使用哪些类型的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号