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 }
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!