防止类型充当映射键
虽然某些类型本质上可以充当映射键,但开发人员可能希望阻止这种情况用法。虽然假设私人成员会禁止此类事件的发生,但事实证明这是不够的。本文探讨了渲染无法用作地图键的类型的最佳方法。
比较地图键类型
地图类型的技术规范要求它们能够通过 == 和 != 运算符进行比较。这意味着键类型不能是函数、映射或切片。利用此要求成为防止使用映射键的关键。
引入不可比较的字段
由其字段定义的结构体值只有在所有这些字段都可比较时才可比较。因此,引入不可比较类型的字段实际上使结构失去了充当映射键的资格。一个方便的选择是添加切片类型的字段,因为它们被显式声明为不可比较。
代码示例
考虑对提供的类型进行以下修改:
<code class="go">type MyType struct { A *A b b notComparable []int }</code>
包含 notComparable 字段后,尝试使用 MyType 作为映射键将导致编译时错误:
<code class="go">m := map[MyType]int{}</code>
编译错误:“无效的映射键” type MyType"
其他注意事项
值得注意的是,消除类型的映射键使用也消除了比较其值的选项。这是由于引入了一个无与伦比的领域。为了缓解这个问题,可以引入包装类型来隐藏不可比较的字段,同时保持原始类型的可比性。
以上是以下是一些标题选项,每个标题都强调文章的不同方面: 聚焦问题: * 如何防止类型被用作 Go 中的 Map Key? * 为什么不能使用 MyStruct a的详细内容。更多信息请关注PHP中文网其他相关文章!