下面这段代码输出什么?
type person struct {
name string
}
func main() {
var m map[person]int
p := person{"mike"}
fmt.Println(m[p])
}
- A.0
- B.1
- C.Compilation error
下面这段代码输出什么?
type person struct {
name string
}
func main() {
var m map[person]int
p := person{"mike"}
fmt.Println(m[p])
}
`单行代码`
返回相应零值,int :0
返回0值
nil map 可以取值,但不能直接赋值
mark
m
打卡
打卡
打卡
0
nil数组
m 是一个 map,值是 nil。从 nil map 中取值不会报错,而是返回相应的零值,这里值是 int 类型,因此返回 0。
打卡
打卡
从 nil map 中取值不会报错,而是返回相应的零值
mark
mk
1
mark
map[p]在经过 编译后,走的是runtime.mapaccess1的逻辑;而看到mapaccess1函数,对于 hmap 是 nil 的情况是直接返回空值;源代码如下:
mk
打卡
打卡
打卡
打卡
done
1
mark
da ka
每日打卡
mark
打卡
首先这个 struct 可以比较,可以作为 map 的key。然后从 map 中取 不存在的key 的值不会报错,而是返回相应的零值
细节 细节
mark
mark
如果是数组,没有分配内存的nil,取值是不是就会panic了
打卡
m
mark
nil map 可以取值,但不能直接赋值
mk
mark
打卡
mmmmmmk
m 是一个 map,值是 nil。从 nil map 中取值不会报错,而是返回相应的零值,这里值是 int 类型,因此返回 0。
但是但是,向nil的map set值是会报错的,必须先用make才能向map set值
空map取值不会报错,而是会返回val类型的零值
一年前就打过卡了还是没记得