測試巢狀結構中的Nil 值
在Go 中使用巢狀結構時,常常會遇到某些欄位可能為nil 的情況由於「omitemptyempty」解組。這需要一種可靠地存取深層嵌套欄位而不觸發運行時恐慌的方法。
一般 Nil 檢定
常見的方法是使用 if 語句手動檢查 nil 值。然而,這可能會變得乏味,尤其是對於深度嵌套的結構。更通用的解決方案是在可能包含 nil 欄位的結構中使用指標接收器實作 getter。
Getter 函數
例如,考慮Foo、Bar 和Baz 結構體:
type Bar struct { Bar string Baz *Baz } type Baz struct { Baz string }
我們可以將g >
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
使用這些getter,我們可以訪問嵌套字段而不會出現運行時錯誤,即使某些字段為nil:fmt.Println(f3.Bar.GetBaz().GetBaz()) // No panic fmt.Println(f2.Bar.GetBaz().GetBaz()) // No panic fmt.Println(f1.Bar.GetBaz().GetBaz()) // No panic if baz := f2.Bar.GetBaz(); baz != nil { fmt.Println(baz.GetBaz()) } else { fmt.Println("something nil") }這種方法確保類型安全並消除與訪問nil 指標相關的運行時恐慌。它還提供了一種更簡潔、更優雅的方式來處理嵌套的 nil 值。
以上是如何安全地存取 Go 結構中的嵌套 Nil 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!