Heim >Backend-Entwicklung >Golang >Wie greife ich sicher auf verschachtelte Nullwerte in Go-Strukturen zu?

Wie greife ich sicher auf verschachtelte Nullwerte in Go-Strukturen zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 20:43:10531Durchsuche

How to Safely Access Nested Nil Values in Go Structs?

Nullwerte in verschachtelten Strukturen testen

Bei der Arbeit mit verschachtelten Strukturen in Go kommt es häufig vor, dass bestimmte Felder möglicherweise Null sind aufgrund von „omitemptyempty“-Unmarshalling. Dies erfordert eine Methode für den zuverlässigen Zugriff auf tief verschachtelte Felder, ohne Laufzeitpaniken auszulösen.

Generischer Nulltest

Ein gängiger Ansatz besteht darin, mithilfe von if-Anweisungen manuell nach Nullwerten zu suchen. Dies kann jedoch insbesondere bei tief verschachtelten Strukturen mühsam werden. Eine allgemeinere Lösung besteht darin, Getter mit Zeigerempfängern in den Strukturen zu implementieren, die Nullfelder enthalten können.

Getter-Funktionen

Berücksichtigen Sie beispielsweise Foo, Bar und Baz-Strukturen:

type Bar struct {
    Bar string
    Baz *Baz
}

type Baz struct {
    Baz string
}

Wir können Getter definieren als folgt:

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 verwenden

Mit diesen Gettern können wir ohne Laufzeitfehler auf verschachtelte Felder zugreifen, selbst wenn einige Felder Null sind:

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

Dieser Ansatz gewährleistet die Typsicherheit und eliminiert Laufzeitpaniken, die mit dem Zugriff auf Nullzeiger verbunden sind. Es bietet außerdem eine prägnantere und elegantere Möglichkeit, mit verschachtelten Nullwerten umzugehen.

Das obige ist der detaillierte Inhalt vonWie greife ich sicher auf verschachtelte Nullwerte in Go-Strukturen zu?. 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