Heim  >  Artikel  >  Backend-Entwicklung  >  Basic Golang – Gleichheitsvergleich

Basic Golang – Gleichheitsvergleich

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 00:28:02511Durchsuche

Golang básico - Comparação de Igualdade

Dieser Beitrag ist Teil einer Serie, in der ich die wesentlichen Grundlagen für die Entwicklung mit GoLang teilen möchte.

Logische Vergleiche mit den Operatoren == oder != sind nicht rätselhaft. Oder Ihr Code vergleicht, ob die Werte gleich oder unterschiedlich sind.
Es gibt jedoch einige wichtige Details zu dem, was Sie vergleichen.

Vergleichbare Schnittstelle

Als Erstes müssen Sie wissen, was mit diesen Operatoren verglichen werden kann. Der offensichtlichste Ort, um dies zu erfahren, ist die Go-Dokumentation: Abschnitt über Komparatoren

Und eine weitere Möglichkeit besteht darin, sich die vergleichbare Schnittstelle anzusehen, die zusammen mit der generischen Implementierung von Go hinzugefügt wurde. Alle Typen, die diese Schnittstelle implementieren, sind vergleichbar.

Im Grunde sind also alle von Go definierten primitiven Typen vergleichbar, wie zum Beispiel: String, Zahlen (int, float, complex), bool.

Vergleich komplexer Typen

Einige Typen haben Bedingungen, um vergleichbar zu sein oder nicht. Das ist der Fall bei: Struktur, Slices und Kanälen.
Sie sind nur dann vergleichbar, wenn auch ihre Elemente vergleichbar sind.
Das Interessante ist, dass Go dies auf Kompilierungsebene validiert und Ihnen so hilft, Laufzeitfehler zu vermeiden, zum Beispiel:

//Esse código compila e a comparação funciona:
func main() {
    test1 := struct {
        name       string
    }{}
    test2 := struct {
        name       string
    }{}
    if test1 == test2 {
        fmt.Println("Funciona")
    }
}

Im obigen Code erstelle ich zwei Strukturen mit äquivalenten Attributen und der Vergleich funktioniert.

//Esse código não compila
func main() {
    test1 := struct {
        name       string
        attributes map[string]string
    }{}
    test2 := struct {
        name       string
        attributes map[string]string
    }{}
    if test1 == test2 {
        fmt.Println("Cade?")
    }
}

Die Kompilierung dieses Codes schlägt mit dem Fehler „Ungültiger Vorgang“ fehl.

Dies geschieht, weil die Karte in Go kein vergleichbarer Typ ist.

Details zu Strukturen und Karte

Es ist sehr praktisch, Strukturen mit == vergleichen zu können, da dies die Typen sind, bei denen wir unsere Modellierung anpassen.
Aber selbst wenn Sie einen nicht vergleichbaren Typ verwenden, gibt es einige Möglichkeiten, den Code zu vereinfachen, und wenn Sie das wissen, müssen Sie keine wirklich langweiligen Bedingungen schreiben.

Nun, stellen wir uns vor, wir arbeiten in einem Schulsystem und wir haben die folgende nicht vergleichbare Struktur:

type student struct {
    ID         int
    name       string
    age        int
    course     string
    attributes map[string]string
}

Das Gute daran ist, dass diese Struktur ein ID-Feld hat, was es viel einfacher macht, wenn Sie mit persistenten Daten arbeiten.

Stellen Sie sich nun vor, Sie arbeiten mit Daten, die noch vorübergehend sind, z. B. wenn Sie eine Datei lesen und eine Verarbeitung durchführen müssen, bevor diese Daten dauerhaft gespeichert werden.

Sie haben immer die Möglichkeit, Feld für Feld zu vergleichen. Das ist überhaupt nicht praktisch, aber es funktioniert. Sie können die Strukturkomposition jedoch wie folgt nutzen:

func main() {
    type identity struct {
        name   string
        age    int
        course string
    }
    type student struct {
        ID int
        identity
        attributes map[string]string
    }

    s1 := student{
        identity: identity{
            name:   "Chuck",
            age:    10,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "10",
        },
    }
    s2 := student{
        identity: identity{
            name:   "Chuck",
            age:    10,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "20",
        },
    }

    s3 := student{
        identity: identity{
            name:   "Chuck",
            age:    12,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "20",
        },
    }

    if s1.identity == s2.identity {
        fmt.Println("Achou", s1)
    }

    if s1.identity != s3.identity {
        fmt.Println("Não achou")
    }
}

Die Alternative zu diesem Code wäre, Bedingungen wie diese zu erstellen:

    if s1.name == s2.name && s1.age == s2.age && s1.course == s2.course {
        fmt.Println("Achou", s1)
    }

Sie könnten es in eine Funktion extrahieren, um es weniger verwirrend zu machen, aber Sie müssten diese Vergleiche trotzdem beibehalten.

Nutzen Sie die Komposition gut, dies kann Ihren Code erheblich vereinfachen!

Zusammenfassung

  • Erfahren Sie mehr über die vergleichbare Schnittstelle
  • Primitive Typen sind vergleichbar
  • Komplexe Typen können vergleichbar sein oder auch nicht
  • Nutzen Sie die Komposition zu Ihrem Vorteil.

Das obige ist der detaillierte Inhalt vonBasic Golang – Gleichheitsvergleich. 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