Basic Golang – Gleichheitsvergleich
Nov 01, 2024 am 12:28 AMDieser 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?
