在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中文網其他相關文章!