在 Go 中,将 JSON 数据解组到结构中可能会由于省略空字段而导致字段具有 nil 值。虽然在这种情况下手动检查 nil 引用是可能的,但这可能是乏味且低效的。
考虑以下深层嵌套结构:
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中文网其他相关文章!