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 09:36:11646Durchsuche

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

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!

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