gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:38:28 24 4
gpt4 key购买 nike

假设我有一个看起来像这样的 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 struct 存储在进程的内存中, 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()
}

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

最佳答案

对于 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,它也会运行而不会 panic 。

关于pointers - 如何检查嵌套指针访问/方法在运行时是否无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60381566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com