【发布时间】:2018-02-07 20:50:57
【问题描述】:
当使用来自可能的“nil”指针的数据初始化结构类型时,恐慌消息总是指在该指针中调用函数的第一行,而不是值。
https://play.golang.org/p/VgX59Y08syi
例如,如果你在上面的代码中交换第 20 行和第 21 行,panic 会发生在调用函数的行,而不是第一次取消对 nil 指针的引用。
为什么会发生这种情况,而不是发生在“myStruct.MyString”上的恐慌?
【问题讨论】:
-
我怀疑 struct 字段的初始化顺序是否由规范规定(但未检查),因此编译器可以先执行一个字段(而不是源顺序)。
-
出于速度原因,它可以自动这样做。即函数比其他任何东西都需要更长的时间来评估
-
是的,没有指定顺序,所以没有理由假设一个字段会在另一个字段之前初始化。
标签: go