go map键类型小记
一、Go语言map的键类型不可以是函数类型、字典类型和切片类型。因为map键值需要可以做hash操作,而func,map,slice不支持这些操作。
报错:
并且,一般struct可以支持hash操作,如果在struct里面包含slice等类型,就不行了:
数组类型是可以用作key的:
二、Chan可以支持hash操作,是因为他的值是个指针:
但是指针用作key的意义不大,因为再构造一个同样的struct,即使内部值一样,但是由于struct中成员channel的地址不一样,也不能再业务上实现想要的目的:
面对struct中包含不可hash的成员的情况,我们可以通过构造一个可以hash的标识,来代替struct本身成为key。比如: