Standardwerte und Unterscheidung nicht initialisierter Felder in Go
In Go haben primitive Typen Standardwerte. Ganzzahlen (int) werden beispielsweise auf 0 initialisiert. Bei der Arbeit mit Strukturen kann es jedoch schwierig sein, zwischen einem 0-Wert und einem nicht initialisierten Feld zu unterscheiden.
Bedenken Sie beispielsweise den folgenden Code:
package main import "log" type test struct { testIntOne int testIntTwo int } func main() { s := test{testIntOne: 0} log.Println(s) }
In diesem Code sind sowohl testIntOne als auch testIntTwo Null. Allerdings wurde testIntOne explizit auf 0 gesetzt, während testIntTwo mit dem Standardwert initialisiert wurde. Diese Mehrdeutigkeit kann zu Verwirrung bei der Bestimmung führen, welche Felder explizit festgelegt wurden.
Kann zwischen diesen beiden Fällen unterschieden werden?
Nein, Go verfolgt nicht, ob ob ein Feld festgelegt wurde oder nicht. Daher ist es unmöglich zu wissen, ob ein Nullwert das Ergebnis einer Initialisierung oder einer absichtlichen Zuweisung ist.
Problemumgehungen
type test struct { testIntOne *int testIntTwo *int }
type test struct { testIntOne int testIntTwo bool // Tracks if testIntTwo has been set } func (t *test) SetTestIntTwo(val int) { t.testIntTwo = val t.isSetTestIntTwo = true } func main() { s := test{} s.SetTestIntTwo(0) fmt.Println(s.isSetTestIntTwo) // Output: true }
Das obige ist der detaillierte Inhalt vonWie kann ich in Go-Strukturen zwischen Standardwerten und explizit festgelegten Nullwerten unterscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!