首页 > 后端开发 > Golang > 如何有效测试深度嵌套 Go 结构中的 Nil 值?

如何有效测试深度嵌套 Go 结构中的 Nil 值?

DDD
发布: 2024-12-27 07:25:14
原创
854 人浏览过

How to Efficiently Test for Nil Values in Deeply Nested Go Structs?

深度嵌套结构中的 Nil 值测试

在 Go 中,将 JSON 数据解组到结构中可能会由于省略空字段而导致字段具有 nil 值。虽然在这种情况下手动检查 nil 引用是可能的,但这可能是乏味且低效的。

使用 Getters 的通用方法

考虑以下深层嵌套结构:

type Foo struct {
    Foo string
    Bar *Bar
}

type Bar struct {
    Bar string
    Baz *Baz
}

type Baz struct {
    Baz string
}
登录后复制

为了一般性地测试嵌套结构中的 nil 值,一个优雅的解决方案是向用作指针的结构添加 getter 方法。这些方法在访问其字段之前检查接收者是否为 nil。

func (b *Bar) GetBaz() *Baz {
    if b == nil {
        return nil
    }
    return b.Baz
}

func (b *Baz) GetBaz() string {
    if b == nil {
        return ""
    }
    return b.Baz
}
登录后复制

使用这些 getter,nil 检查变得简单并避免运行时恐慌:

fmt.Println(f3.Bar.GetBaz().GetBaz())
fmt.Println(f2.Bar.GetBaz().GetBaz())
fmt.Println(f1.Bar.GetBaz().GetBaz())

if baz := f2.Bar.GetBaz(); baz != nil {
    fmt.Println(baz.GetBaz())
} else {
    fmt.Println("something nil")
}
登录后复制

结论

此技术利用指针接收器的安全方法调用,并简化了嵌套结构中 nil 值的测试过程。它提供了一个通用且高效的解决方案,没有运行时错误的风险,使其成为复杂结构层次结构的有价值的方法。

以上是如何有效测试深度嵌套 Go 结构中的 Nil 值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板