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
Freigeben: 2024-12-04 17:20:15
Original
972 Leute haben es durchsucht

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)
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren
  • 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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage