Heim >Backend-Entwicklung >Golang >Wie kann ich in Go-Strukturen zwischen Standardwerten und explizit festgelegten Nullwerten unterscheiden?

Wie kann ich in Go-Strukturen zwischen Standardwerten und explizit festgelegten Nullwerten unterscheiden?

DDD
DDDOriginal
2024-12-04 17:20:15973Durchsuche

How Can I Differentiate Between Default and Explicitly Set Zero Values in Go Structs?

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

  • Zeiger verwenden: Zeiger haben einen Nullwert, sodass Sie überprüfen können, ob ein Zeiger gesetzt wurde, indem Sie prüfen, ob dies der Fall ist Null.
type test struct {
    testIntOne *int
    testIntTwo *int
}
  • Erstellen Sie eine Setter-Methode: Sie können eine Methode erstellen, um den Wert eines Felds festzulegen und zu verfolgen, ob er festgelegt wurde.
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!

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