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

假设我有一个看起来像这样的 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()

}

我问这个的原因是深度嵌套的指针,这可能会变得非常痛苦。有什么想法吗?


沧海一幻觉
浏览 154回答 1
1回答

森林海

对于 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,它也会运行而不会恐慌。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go