映射中的函数键
本文探讨了在 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中文网其他相关文章!