Golang相当于hashcode()和equals()方法

时间:2018-03-27 21:57:37

标签: go

我已经开始使用Golang并且知道自定义结构可以用作地图中的键。但是我想知道是否可以明确指定我的映射如何区分键(类似于我们使用hashcode()和equals()的Java。让我们说:

type Key struct {
   Path, Country string
}

如果我想指定只使用struct Key的Path属性来区分地图中的键,我该怎么做?

1 个答案:

答案 0 :(得分:0)

  

地图键可以是任何可比较的类型。语言规范精确定义了这一点,但简而言之,类似的类型是布尔值,数字,字符串,指针,通道和接口类型,以及仅包含这些类型的结构或数组。值得注意的是,列表中没有切片,贴图和函数;这些类型无法使用==进行比较,也不能用作地图键。   https://blog.golang.org/go-maps-in-action

但是你可以实现hashCode(),它将struct作为参数并返回string。然后在地图中使用此字符串作为键。

例如:

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"
}