hashcode()和equals()方法的Golang等价物

hashcode()和equals()方法的Golang等价物,go,Go,我已经开始使用Golang,并且知道自定义结构可以用作地图中的键。但我想知道是否有可能明确指定我的映射如何在类似于Java的键之间进行区分,在Java中我们使用hashcode和equals。假设我们有: type Key struct { Path, Country string } 如果我想指定仅使用struct Key的Path属性来区分映射中的键,我该怎么做 映射键可以是任何可比较的类型。语言规范对此进行了精确的定义,但简而言之,可比较的类型包括布尔、数字、字符串、指针、通道和接

我已经开始使用Golang,并且知道自定义结构可以用作地图中的键。但我想知道是否有可能明确指定我的映射如何在类似于Java的键之间进行区分,在Java中我们使用hashcode和equals。假设我们有:

type Key struct {
   Path, Country string
}
如果我想指定仅使用struct Key的Path属性来区分映射中的键,我该怎么做

映射键可以是任何可比较的类型。语言规范对此进行了精确的定义,但简而言之,可比较的类型包括布尔、数字、字符串、指针、通道和接口类型,以及仅包含这些类型的结构或数组。列表中明显缺少切片、映射和函数;这些类型不能使用==进行比较,也不能用作映射键。

但您可以实现hashCode,它将struct作为参数并返回字符串。然后使用此字符串作为映射中的键

例如:

type Key struct {
  Path, City, Country string
}

func (k Key) hashCode() string {
   return fmt.Sprintf("%s/%s", k.Path, k.City) //omit Country in your hash code here
}


func main(){
  myMap := make(map[string]interface{})

  n := Key{Path: "somePath", City:"someCity", Country:"someCountry"}
  myMap[n.hashCode()] = "someValue"
}
试试这个?请在这个网站上搜索一下。很可能你的问题以前已经得到了回答。否则,欢迎访问SO!如果您只希望使用Path来区分映射中的键,那么Path不应该是键而不是结构吗?