很显然 slice,map,function 不可以,
所以 数字、string、bool、array、channel、指针可以,以及 包含前面类型的 struct
leetcode 49 题 所以恰好要取一个 string 的 hash 值,题解中大神云集,各种质数相乘,字符排序后作为 key 的,更有甚者将数组作为 key,我觉得很巧妙都很巧妙。
支持==和!=操作就可以做key,实际上只有function、map、slice三个kind不支持作为key,因为只能和nil比较不能和另一个值比较。布尔、整型、浮点、复数、字符串、指针、channel等都可以做key。struct能不能做key要看每一个字段,如果所有字段都可以做key,那这个struct就可以。有一个字段不能做key,这个struct就不能做key。array也是,元素类型能做key,那这个array就可以。
例如:
type Foo map[struct {
B bool
I int
F float64
C complex128
S string
P *Foo
Ch chan Foo
}]bool
每一个字段都可以做key,Foo就可以做key。再如:
type Foo map[struct {
Fn func() Foo
M map[*Foo]int
S []Foo
}]bool
有一个字段不能做key、Foo就不允许做key,而这三个字段都不能。
字段是递归检查的:
type Foo map[struct {
Sub struct {
M map[*Foo]bool
}
}]bool
Sub的M字段不能做key,Sub就不能做key,Foo也就不能做key。
总之想把一个数据结构用于map的key,就不能包含function、map和slice。
有具体的上下文吗?起码也要把 key ( )这个函数内容写出来一般来讲这个可以是一个标识符,表示与其字面一致的意思Key_dec==0 意思是判断变量是否为0, 为0,表达式为真,否则为假