假设我有一个看起来像这样的 Go 结构(为了解释,请原谅语法):type Foo struct { MyBar *Bar}type Bar struct { value int}func (b* Bar) Bark() { fmt.Printf("Hello I'm a bar with value: %v", b.value)}现在,假设此Foo结构存储在进程的内存中,并且MyBar填充该字段需要一些时间。就像,它是nil一段时间。有什么方法可以检查它是否保存以Bark()在运行时访问该方法而无需手动进行nil检查?例如,类似:// Early on, this happens:f := &Foo{}....// And later, I wanna see if its safe to do:if isSafe(b.MyBar) { b.MyBar.Bar()}我问这个的原因是深度嵌套的指针,这可能会变得非常痛苦。有什么想法吗?
1 回答
森林海
TA贡献2011条经验 获得超2个赞
对于 nil 指针,没有深入检查结构的捷径。你isSafe本质上是一个零检查:
if b.MyBar!=nil {
b.MyBar.Bark()
}
或者,您也可以在方法中检查 nil 接收器:
func (b* Bar) Bark() {
if b!=nil {
fmt.Printf("Hello I'm a bar with value: %v", b.value)
}
}
不过,最后一种用法可能会隐藏程序中的错误,因为即使接收器不应该为 nil,它也会运行而不会恐慌。
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消
