首页  >  文章  >  后端开发  >  为什么函数不能用作 Go 中的 Map 键?

为什么函数不能用作 Go 中的 Map 键?

Linda Hamilton
Linda Hamilton原创
2024-10-31 18:27:29539浏览

Why Can't Functions Be Used as Map Keys in Go?

映射中的函数键

本文探讨了在 Go 编程语言中使用函数作为映射键的限制。

问题

考虑以下假设的 Go 代码:

type Action func(int)
func test(a int) { }
func test2(a int) { }

func main() {
  x := map[Action]bool{}
  x[test] = true
  x[test2] = false
}

如果您尝试编译此代码,您将遇到一个错误,指示“无效的映射键”输入 Action。”

答案

Go 语言规范明确禁止使用函数、映射和切片作为映射键。具体来说,规范指出:

“必须为键类型的操作数完全定义比较运算符 == 和 !=;因此键类型不能是函数、映射或切片。”

之所以存在此限制,是因为必须针对键类型明确定义相等比较运算符(== 和 !=)。函数、映射和切片不是合适的键类型,因为它们的相等比较未完全定义。

结论

虽然使用函数作为映射键可能很诱人,由于需要明确定义的相等比较,Go 中不允许这样做。因此,您应该使用其他合适的类型,例如字符串、整数或结构体作为映射键。

以上是为什么函数不能用作 Go 中的 Map 键?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn