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

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

Mary-Kate Olsen
Freigeben: 2024-10-27 10:47:02
Original
1036 Leute haben es durchsucht

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

Verhindern, dass Typen als Kartenschlüssel fungieren

In bestimmten Szenarien kann es unerwünscht sein, dass ein bestimmter Typ als Kartenschlüssel verwendet wird . Obwohl sie über ein privates Mitglied verfügen, können solche Typen weiterhin in dieser Funktion verwendet werden. In diesem Artikel werden Methoden zur Verhinderung solcher Vorkommnisse untersucht.

Die Grundvoraussetzung dafür, dass ein Typ als Kartenschlüssel dienen kann, ist, dass alle seine Felder vergleichbar sein müssen. Eine effektive Lösung besteht darin, ein nicht vergleichbares Feld in die Typstruktur aufzunehmen. Typen wie Slices, Karten und Funktionen können nicht verglichen werden, sodass das Hinzufügen eines Felds dieses Typs die Verwendung des umschließenden Typs effektiv ausschließt als Kartenschlüssel.

Zum Beispiel:

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

Ein Versuch, MyType als Kartenschlüssel zu verwenden:

m := map[MyType]int{}
Nach dem Login kopieren

würde zu der folgenden Kompilierungszeit führen Fehler:

invalid map key type MyType
Nach dem Login kopieren

Es ist jedoch wichtig zu beachten, dass dieser Ansatz einen potenziellen Nachteil mit sich bringt: er macht den Typ nicht vergleichbar. Dies bedeutet Vergleichsoperatoren (z. B. ==, ! =) kann nicht mehr auf den geänderten Typ angewendet werden, was sich auf bestimmte Anwendungsfälle auswirken kann.

Um die Vergleichbarkeit zu wahren und gleichzeitig die Verwendung von Kartenschlüsseln einzuschränken, kann ein Wrapper-Typ verwendet werden. Der Wrapper-Typ bettet den ursprünglichen Typ ein, fügt jedoch ein nicht vergleichbares Feld hinzu. Dadurch können Vergleichsvorgänge für den eingebetteten Typ durchgeführt werden, während gleichzeitig verhindert wird, dass der Wrapper-Typ als Kartenschlüssel verwendet wird.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass 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