首页 >后端开发 >Golang >如何在 Go Map 中使用用户定义的结构体作为键?

如何在 Go Map 中使用用户定义的结构体作为键?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-10 16:30:18562浏览

How Can I Use User-Defined Structs as Keys in Go Maps?

具有用户定义键和自定义相等性的 Go 映射

使用用户定义键实现 Go 映射需要遵守特定的相等规则。不幸的是,Go 的内置相等操作无法针对映射键进行自定义。但是,存在一种有效的解决方法。

不要直接使用结构体实例作为键,而是考虑派生一个可以用作内在键并与您所需的相等语义保持一致的唯一属性。例如,您可以派生代表实例身份的整数或字符串值。

确保仅当相应值代表真实语义身份时才会发生键冲突至关重要。这确保了可互换的值被正确映射。

例如:

type Key struct {
  a *int
}

func (k *Key) HashKey() int {
  return *(*k).a
}

k1, k2 := Key{intPtr(1)}, Key{intPtr(2)}
m := map[int]string{}
m[k1.HashKey()] = "one"
m[k2.HashKey()] = "two"
// m = map[int]string{1:"one", 2:"two"}
m[k1.HashKey()] // -> "one"

请记住,这种方法需要不可变的键。修改上例中的字段会使密钥的身份无效,使其不适合作为哈希密钥。

以上是如何在 Go Map 中使用用户定义的结构体作为键?的详细内容。更多信息请关注PHP中文网其他相关文章!

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