Golang选择器规范指针相关示例末尾两行注释含义疑问
注释含义说明
这两行是Go规范示例的前置约定条件,而非变量零值自带的特性,你本地声明的变量为nil是零值的正常表现,具体含义如下:
- 第一行注释
with t.T0 != nilt是T2值类型变量,直接声明时T2内部的匿名字段*T0为指针类型,零值为nil。该注释约定:后续用到该t变量的选择器演示场景中,已经提前给t.T0赋值了有效的非空*T0指针,避免访问字段/调用方法时触发空指针panic。 - 第二行注释
with p != nil and (*p).T0 != nilp是*T2指针类型变量,直接声明时零值为nil。该注释约定:后续用到该p变量的选择器演示场景中,已经提前完成两层初始化:首先给p赋值了有效的非空*T2指针,其次p指向的T2实例内部的*T0匿名字段也为非空值,同样是为了规避空指针异常,专注演示选择器语法规则。
如果需要满足注释约定的条件,可参考如下初始化写法:
// 初始化t满足t.T0 != nil var t = T2{ T0: &T0{x: 10}, } // 初始化p满足p != nil且(*p).T0 != nil var p = &T2{ T0: &T0{x: 20}, }
内容的提问来源于stack exchange,提问作者Nicolai Nikolai
相关产品推荐
相关产品推荐

