Heim > Backend-Entwicklung > Golang > Wie haben sich die Typbeschränkungen von Go für Kartenschlüssel in den Versionen 1.18, 1.19 und 1.20 entwickelt?

Wie haben sich die Typbeschränkungen von Go für Kartenschlüssel in den Versionen 1.18, 1.19 und 1.20 entwickelt?

Patricia Arquette
Freigeben: 2024-12-22 15:49:14
Original
473 Leute haben es durchsucht

How Have Go's Type Constraints for Map Keys Evolved Across Versions 1.18, 1.19, and 1.20?

Go Generics: Typbeschränkungen für Kartenschlüssel

In Go1.18 wird eine generische verknüpfte Liste definiert, die als Kartenschlüssel verwendet werden kann schlägt mit der Fehlermeldung „Cons[int] implementiert kein Vergleichsobjekt fehl.“ fehl. Dies liegt an der strengen Anforderung an Kartenschlüssel, die vergleichbare Schnittstelle zu implementieren, wodurch sichergestellt wird, dass sie Gleichheitsprüfungen (== und !=) unterstützen, ohne in Panik zu geraten.

Go 1.20 Update

In Go 1.20 gilt die vergleichbare Einschränkung jetzt als korrektes Allheilmittel für Kartenschlüssel. Typen, die gemäß der Go-Spezifikation als vergleichbar gelten, erfüllen die Einschränkung, auch wenn Vergleiche in Panik geraten können. Dadurch wird die Inkonsistenz zwischen Typen, die gemäß der Spezifikation vergleichbar sind, und solchen, die streng vergleichbar sind, behoben.

Überlegungen zu Go 1.18 und 1.19

In Go 1.18 und 1.19 ist die Eine vergleichbare Einschränkung konnte nur durch streng vergleichbare Typen instanziiert werden, die == und != unterstützen, ohne in Panik zu geraten. Dies schloss Schnittstellen aus. Obwohl die Gleichheitsoperatoren unterstützt wurden, implementierten Schnittstellen keinen Vergleich, da ihre dynamischen Typen und Werte verglichen wurden. Dies bedeutete, dass die bereitgestellte Cons-Struktur, die ein Feld vom Typ List[X] enthielt, kein vergleichbares implementieren konnte.

Alternative Einschränkung

Um diese Einschränkung zu beheben, Eine benutzerdefinierte Einschränkung, die vergleichbare Elemente einbettet, könnte durch Map-Key-Strukturen definiert und implementiert werden, anstatt ein Schnittstellenfeld zu verwenden. Zum Beispiel:

type List interface {
    comparable
    isList() bool
}
Nach dem Login kopieren

Zusammenfassend lässt sich sagen, dass die vergleichbare Einschränkung jetzt die empfohlene Typbeschränkung für Kartenschlüssel in Go 1.20 ist. In Go 1.18 und 1.19 konnten Schnittstellen aufgrund ihres unendlichen Typsatzes nicht mit vergleichbar instanziiert werden. Als Alternativen könnten benutzerdefinierte Einschränkungen verwendet werden, die vergleichbare Elemente einbetten.

Das obige ist der detaillierte Inhalt vonWie haben sich die Typbeschränkungen von Go für Kartenschlüssel in den Versionen 1.18, 1.19 und 1.20 entwickelt?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage