登录
首页 >  Golang >  Go问答

如何验证在运行时无效的嵌套指针访问/方法

来源:stackoverflow

时间:2024-03-08 13:36:24 106浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《如何验证在运行时无效的嵌套指针访问/方法》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

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

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


解决方案


深度检查结构体中是否有 nil 指针没有捷径。您的 issafe 本质上是一个 nil 检查:

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)
    }
}

不过,最后一种用法可能会隐藏程序中的错误,因为即使接收器不应该为零,它也会运行而不会出现恐慌。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>