首頁 >後端開發 >Golang >如何有效測試深度嵌套 Go 結構中的 Nil 值?

如何有效測試深度嵌套 Go 結構中的 Nil 值?

DDD
DDD原創
2024-12-27 07:25:14860瀏覽

How to Efficiently Test for Nil Values in Deeply Nested Go Structs?

深度嵌套結構中的Nil 值測試

在Go 中,將JSON 資料解組到結構中可能會因為省略空白欄位而導致欄位具有nil值。雖然在這種情況下手動檢查 nil 引用是可能的,但這可能是乏味且低效的。

使用Getters 的通用方法

考慮以下深層嵌套結構:

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn