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.
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.
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.
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!
Das obige ist der detaillierte Inhalt vonBasic Golang – Gleichheitsvergleich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!