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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-27 10:47:02941浏览

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

防止类型充当映射键

在某些情况下,可能不希望将特定类型用作映射键。尽管拥有私有成员,此类类型仍然可以以此身份使用。本文探讨了防止此类情况发生的方法。

类型充当映射键的基本条件是其所有字段必须可比较。 一个有效的解决方案是在类型结构中包含不可比较的字段。切片、映射和函数等类型无法进行比较,因此添加此类型的字段可以有效地阻止使用封闭类型作为映射键。

例如:

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

尝试使用 MyType 作为映射键:

m := map[MyType]int{}

将导致以下编译时错误:

invalid map key type MyType

但是,需要注意的是,这种方法有一个潜在的缺点:它使类型不可比较。这意味着比较运算符(例如,==,! =) 不能再应用于修改后的类型,这可能会影响某些用例。

为了在限制映射键使用的同时保持可比性,可以使用包装类型。包装类型嵌入原始类型,但添加了不可比较的字段。这允许对嵌入类型执行比较操作,同时仍然禁止将包装类型用作映射键。

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

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