Heim > Backend-Entwicklung > Golang > Wie kann verhindert werden, dass benutzerdefinierte Typen in Go als Kartenschlüssel verwendet werden?

Wie kann verhindert werden, dass benutzerdefinierte Typen in Go als Kartenschlüssel verwendet werden?

Linda Hamilton
Freigeben: 2024-10-26 07:04:02
Original
433 Leute haben es durchsucht

How to Prevent Custom Types from Being Used as Map Keys in Go?

Map-Key-Einschränkung für benutzerdefinierte Typen

Bestimmte Typen sind von Natur aus ungeeignet als Map-Schlüssel, wie zum Beispiel Maps, Slices und Funktionen. Einige Entwickler möchten jedoch möglicherweise ausdrücklich verhindern, dass ein bestimmter benutzerdefinierter Typ als Zuordnungsschlüssel verwendet wird.

Auf den ersten Blick scheint es eine Lösung zu sein, sich auf private Mitglieder innerhalb des Typs zu verlassen, aber dieser Ansatz ist wirkungslos. Um dieses Problem anzugehen, benötigen wir eine grundlegendere Lösung, die sich an die Sprachspezifikation hält.

Der Schlüssel zum Verbot der Verwendung eines Typs als Kartenschlüssel liegt in der Verletzung der Anforderungen für Vergleichsoperatoren. Gemäß der Spezifikation müssen Kartenschlüsseltypen vollständig definierte Vergleichsoperatoren == und != haben. Indem wir also ein Feld mit einem nicht vergleichbaren Typ einschließen, können wir effektiv den gesamten Typ nicht vergleichbar machen.

Betrachten Sie beispielsweise den folgenden Typ:

type MyType struct {
    A *A
    b b
    notComparable []int
}
Nach dem Login kopieren

Hinzufügen des Feldes notComparable mit einem Slice-Typ macht den gesamten MyType nicht vergleichbar und verhindert so seine Verwendung als Kartenschlüssel. Dies liegt daran, dass Slices nicht verglichen werden können.

m := map[MyType]int{} // Compile-time error: invalid map key type MyType
Nach dem Login kopieren

Es ist erwähnenswert, dass die Einführung eines nicht vergleichbaren Feldes weitere Auswirkungen haben kann. Dadurch wird es beispielsweise unmöglich, Werte dieses Typs mit Operatoren wie == und != zu vergleichen. Durch sorgfältiges Entwerfen des Typs ist es jedoch möglich, die Vergleichbarkeit für bestimmte Felder beizubehalten und gleichzeitig zu verhindern, dass der Typ als Kartenschlüssel verwendet wird.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass benutzerdefinierte Typen in Go als Kartenschlüssel verwendet werden?. 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