Heim >Backend-Entwicklung >Golang >Wie kann man in tief verschachtelten Go-Strukturen effizient auf Nullwerte testen?

Wie kann man in tief verschachtelten Go-Strukturen effizient auf Nullwerte testen?

DDD
DDDOriginal
2024-12-27 07:25:14860Durchsuche

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

Testen auf Nullwerte in tief verschachtelten Strukturen

In Go kann das Unmarshalling von JSON-Daten in Strukturen zu Feldern mit Nullwerten führen, da leere Felder weggelassen werden. Eine manuelle Prüfung auf Null-Referenzen ist in solchen Szenarien zwar möglich, kann jedoch mühsam und ineffizient sein.

Ein generischer Ansatz mit Gettern

Betrachten Sie die folgende tief verschachtelte Struktur:

type Foo struct {
    Foo string
    Bar *Bar
}

type Bar struct {
    Bar string
    Baz *Baz
}

type Baz struct {
    Baz string
}

Um in verschachtelten Strukturen generisch auf Nullwerte zu testen, besteht eine elegante Lösung darin, Getter-Methoden zu Strukturen hinzuzufügen, die als Zeiger verwendet werden. Diese Methoden prüfen, ob der Empfänger Null ist, bevor sie auf seine Felder zugreifen.

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
}

Mit diesen Gettern werden Nullprüfungen einfacher und vermeiden Laufzeitpaniken:

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")
}

Fazit

Diese Technik nutzt die sicheren Methodenaufrufe mit Zeigerempfängern und vereinfacht den Prozess des Testens auf Nullwerte in verschachtelten Strukturen. Es bietet eine generische und effiziente Lösung ohne das Risiko von Laufzeitfehlern und ist somit ein wertvoller Ansatz für komplexe Strukturhierarchien.

Das obige ist der detaillierte Inhalt vonWie kann man in tief verschachtelten Go-Strukturen effizient auf Nullwerte testen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn