首页  >  文章  >  后端开发  >  如何防止自定义类型被用作 Go 中的映射键?

如何防止自定义类型被用作 Go 中的映射键?

Linda Hamilton
Linda Hamilton原创
2024-10-26 07:04:02373浏览

How to Prevent Custom Types from Being Used as Map Keys in Go?

自定义类型的映射键限制

某些类型本质上不适合作为映射键,例如映射、切片和函数。但是,一些开发人员可能希望显式阻止将特定的自定义类型用作映射键。

最初,依赖类型中的私有成员似乎是一种解决方案,但这种方法是无效的。为了解决这个问题,我们需要一个更根本的、符合语言规范的解决方案。

禁止使用类型作为映射键的关键在于违反比较运算符的要求。根据规范,映射键类型必须具有完全定义的比较运算符 == 和 !=。因此,通过包含不可比较类型的字段,我们可以有效地使整个类型不可比较。

例如,考虑以下类型:

type MyType struct {
    A *A
    b b
    notComparable []int
}

添加字段notComparable 与切片类型呈现整个 MyType 不可比较,从而阻止其用作映射键。这是因为切片无法进行比较。

m := map[MyType]int{} // Compile-time error: invalid map key type MyType

值得注意的是,引入不可比较字段可能会产生进一步的影响。例如,它将无法使用 == 和 != 等运算符来比较类型的值。但是,通过仔细设计类型,可以保留特定字段的可比性,同时仍然防止该类型被用作映射键。

以上是如何防止自定义类型被用作 Go 中的映射键?的详细内容。更多信息请关注PHP中文网其他相关文章!

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