防止类型充当映射键
在某些情况下,可能不希望将特定类型用作映射键。尽管拥有私有成员,此类类型仍然可以以此身份使用。本文探讨了防止此类情况发生的方法。
类型充当映射键的基本条件是其所有字段必须可比较。 一个有效的解决方案是在类型结构中包含不可比较的字段。切片、映射和函数等类型无法进行比较,因此添加此类型的字段可以有效地阻止使用封闭类型作为映射键。
例如:
type MyType struct { A *A b b preventUseAsKey []int }
尝试使用 MyType 作为映射键:
m := map[MyType]int{}
将导致以下编译时错误:
invalid map key type MyType
但是,需要注意的是,这种方法有一个潜在的缺点:它使类型不可比较。这意味着比较运算符(例如,==,! =) 不能再应用于修改后的类型,这可能会影响某些用例。
为了在限制映射键使用的同时保持可比性,可以使用包装类型。包装类型嵌入原始类型,但添加了不可比较的字段。这允许对嵌入类型执行比较操作,同时仍然禁止将包装类型用作映射键。
以上是如何防止类型被用作 Go 中的映射键?的详细内容。更多信息请关注PHP中文网其他相关文章!