Go每日一题(40) 的题目如下

4507 次点击 · 5 赞 ·大约8小时之前 开始浏览   · 来源「Golang来啦」

下面这段代码输出什么?

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
4507 阅读
48 回复
hard-dev
hard-dev · #1 · 3年之前

返回相应零值,int :0

summers
summers · #2 · 3年之前

返回0值

DreamEagle
DreamEagle · #3 · 3年之前

nil map 可以取值,但不能直接赋值

Natsuwau
Natsuwau · #4 · 3年之前

mark

k53247l
k53247l · #5 · 3年之前

m

don178
don178 · #6 · 3年之前

打卡

feiyang
feiyang · #7 · 3年之前

打卡

henry1
henry1 · #8 · 3年之前

打卡

brothersam
brothersam · #9 · 3年之前

0

abcdhope
abcdhope · #10 · 3年之前

nil数组

feiyang
feiyang · #11 · 2年之前

m 是一个 map,值是 nil。从 nil map 中取值不会报错,而是返回相应的零值,这里值是 int 类型,因此返回 0。

caucer_huazai
caucer_huazai · #12 · 2年之前

打卡

huangyf168
huangyf168 · #13 · 2年之前

打卡

Dessert
Dessert · #14 · 2年之前

从 nil map 中取值不会报错,而是返回相应的零值

hasbug
hasbug · #15 · 2年之前

mark

a406299736
a406299736 · #16 · 2年之前

mk

wzbwzt
wzbwzt · #17 · 2年之前

1

_Aiden_
_Aiden_ · #18 · 2年之前

mark

donscoco
donscoco · #19 · 2年之前

map[p]在经过 编译后,走的是runtime.mapaccess1的逻辑;而看到mapaccess1函数,对于 hmap 是 nil 的情况是直接返回空值;源代码如下:

func mapaccess1(t *maptype, h *hmap, key unsafe.Pointer) unsafe.Pointer {
    ...

    if h == nil || h.count == 0 {// h 就是map指向的地址,因为题目中map还没有申请分配内存空间,所以h是nil
        if t.hashMightPanic() {
            t.hasher(key, 0) // see issue 23734
        }
        return unsafe.Pointer(&zeroVal[0])
    }

    ...
}
NovaChaos
NovaChaos · #20 · 2年之前

mk

YuPeng
YuPeng · #21 · 2年之前

打卡

huangyf168
huangyf168 · #22 · 2年之前

打卡

UniverseOfTomorrow
UniverseOfTomorrow · #23 · 2年之前

打卡

15937510082
15937510082 · #24 · 2年之前

打卡

young13
young13 · #25 · 2年之前

done

wzbwzt
wzbwzt · #26 · 2年之前

1

_Aiden_
_Aiden_ · #27 · 2年之前

mark

cherGou
cherGou · #28 · 2年之前

da ka

beenleqi
beenleqi · #29 · 2年之前

每日打卡

Zuos
Zuos · #30 · 2年之前

mark

euibieur894
euibieur894 · #31 · 2年之前

打卡

feiyang
feiyang · #32 · 2年之前

首先这个 struct 可以比较,可以作为 map 的key。然后从 map 中取 不存在的key 的值不会报错,而是返回相应的零值

YuPeng
YuPeng · #33 · 2年之前

细节 细节

na-ee
na-ee · #34 · 2年之前

image.png

huangyf168
huangyf168 · #35 · 2年之前

mark

hasbug
hasbug · #36 · 2年之前

mark

tustzhaoyang
tustzhaoyang · #37 · 2年之前

如果是数组,没有分配内存的nil,取值是不是就会panic了

euibieur894
euibieur894 · #38 · 2年之前

打卡

1174en
1174en · #39 · 2年之前

m

huangyf168
huangyf168 · #40 · 2年之前

mark

zhangwei_go
zhangwei_go · #41 · 大约1年之前

nil map 可以取值,但不能直接赋值

BigBigGopher
BigBigGopher · #42 · 大约1年之前

mk

Qmfuser
Qmfuser · #43 · 大约1年之前

mark

cllgeek
cllgeek · #44 · 大约1年之前

打卡

a406299736
a406299736 · #45 · 大约1年之前

mmmmmmk

zhangwei_go
zhangwei_go · #46 · 11月之前

m 是一个 map,值是 nil。从 nil map 中取值不会报错,而是返回相应的零值,这里值是 int 类型,因此返回 0。

但是但是,向nil的map set值是会报错的,必须先用make才能向map set值

BigBigGopher
BigBigGopher · #47 · 11月之前

空map取值不会报错,而是会返回val类型的零值

YuPeng
YuPeng · #48 · 11月之前

一年前就打过卡了还是没记得

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传