我已经开始使用Golang并且知道自定义结构可以用作地图中的键。但是我想知道是否可以明确指定我的映射如何区分键(类似于我们使用hashcode()和equals()的Java。让我们说:
type Key struct {
Path, Country string
}
如果我想指定只使用struct Key的Path属性来区分地图中的键,我该怎么做?
答案 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"
}