为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查嵌套指针访问/方法在运行时是否无效

如何检查嵌套指针访问/方法在运行时是否无效

Go
沧海一幻觉 2022-05-18 14:29:09
假设我有一个看起来像这样的 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,它也会运行而不会恐慌。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号