測試嵌套結構中的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中文網其他相關文章!