Heim >Backend-Entwicklung >Golang >Wie kann ich in Go-Strukturen zwischen Standardwerten und explizit festgelegten Nullwerten unterscheiden?
Standardstrukturwerte
In Go werden Standardwerte Feldern einer Struktur zugewiesen, die bei der Strukturdeklaration nicht initialisiert werden. Für primitive Typen wie int ist dieser Standardwert 0. Es kann jedoch problematisch sein, festzustellen, ob dieser Wert explizit festgelegt wurde oder der Standardwert ist.
Gibt es einen Unterschied?
Leider verfolgt Go nicht, ob ein Feld festgelegt wurde oder nicht. Daher gibt es keine Möglichkeit, zwischen einem Feld, das auf 0 initialisiert wurde, und einem Feld, das überhaupt nicht festgelegt wurde, zu unterscheiden.
Problemumgehungen
1. Verwendung von Zeigern:
Durch die Verwendung von Zeigern können Sie ihren Null-Null-Wert ausnutzen. Wenn ein Zeiger Null ist, zeigt dies an, dass er nicht gesetzt wurde.
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} fmt.Println("testIntOne set:", s.testIntOne != nil) fmt.Println("testIntTwo set:", s.testIntTwo != nil) }
2. Verwenden von Methoden:
Sie können auch eine Methode definieren, um ein Feld festzulegen und zu verfolgen, ob es festgelegt wurde.
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func (t *test) SetTwo(i int) { t.testIntTwo, t.twoSet = i, true } func main() { s := test{} s.SetOne(0) fmt.Println("testIntOne set:", s.oneSet) fmt.Println("testIntTwo set:", s.twoSet) }
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!