测试嵌套结构中的 Nil 值
Go 中的嵌套结构很常见,特别是在处理从 JSON 解组的数据时。然而,这些结构体通常有“omimitempty”字段,导致不同级别的非nil和nil值混合。
为了解决这个问题,有两种常见的方法:
1。手动 Nil 检查:
这涉及在每个级别显式检查 nil 值,使用 if 语句,例如:
if f2.Bar != nil && f2.Bar.Baz != nil { fmt.Println(f2.Bar.Baz.Baz) }
此方法很简单,但对于深度学习可能会变得重复且乏味嵌套结构。
2.指针接收器的 getter:
更优雅、更高效的方法是为结构中用作指针的字段定义 getter 方法。这些 getter 检查接收者是否为零,如果是则返回零值。否则,它们返回字段值。
例如,对 Bar 和 Baz 结构使用 getter:
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()) // No panic if baz := f2.Bar.GetBaz(); baz != nil { fmt.Println(baz.GetBaz()) }
此方法消除了对重复的 if 语句并确保取消引用 nil 指针永远不会导致运行时恐慌。它还与生成 protobuf 消息的 Go 代码中使用的方法保持一致,提供了一种自然且一致的方式来处理复杂结构中的 nil 值。
以上是如何有效处理嵌套 Go 结构中的 Nil 值?的详细内容。更多信息请关注PHP中文网其他相关文章!