Verhindern, dass ein Typ als Kartenschlüssel dient
Obwohl einige Typen von Natur aus als Kartenschlüssel dienen können, möchte ein Entwickler dies möglicherweise verhindern Verwendung. Auch wenn davon ausgegangen wird, dass ein privates Mitglied solche Vorkommnisse verbieten würde, erweist sich dies als unzureichend. In diesem Artikel wird der beste Ansatz untersucht, um einen Typ als Kartenschlüssel unbrauchbar zu machen.
Vergleich von Kartenschlüsseltypen
Die technischen Spezifikationen für Kartentypen erfordern, dass sie dazu in der Lage sind Vergleich durch ==- und !=-Operatoren. Dies bedeutet, dass die Schlüsseltypen keine Funktionen, Karten oder Slices sein dürfen. Die Ausnutzung dieser Anforderung wird zum Schlüssel zur Verhinderung der Verwendung von Kartenschlüsseln.
Einführung unvergleichbarer Felder
Strukturwerte, die durch ihre Felder definiert werden, sind nur dann vergleichbar, wenn alle diese Felder vergleichbar sind . Durch die Einführung von Feldern unvergleichlicher Typen wird die Struktur somit effektiv davon ausgeschlossen, als Kartenschlüssel zu dienen. Eine praktische Option besteht darin, ein Feld vom Typ Slice hinzuzufügen, da diese explizit als nicht vergleichbar deklariert werden.
Codebeispiel
Bedenken Sie die folgende Änderung am bereitgestellten Typ:
<code class="go">type MyType struct { A *A b b notComparable []int }</code>
Mit der Einbeziehung des Felds notComparable führt der Versuch, MyType als Kartenschlüssel zu verwenden, zu einem Fehler bei der Kompilierung:
<code class="go">m := map[MyType]int{}</code>
Kompilierungsfehler: „Ungültiger Kartenschlüssel type MyType"
Zusätzliche Überlegungen
Es ist erwähnenswert, dass durch die Eliminierung der Verwendung von Kartenschlüsseln für einen Typ auch die Möglichkeit zum Vergleichen seiner Werte entfällt. Dies ist auf die Einführung eines unvergleichlichen Feldes zurückzuführen. Um dieses Problem zu mildern, kann ein Wrapper-Typ eingeführt werden, um das nicht vergleichbare Feld zu verbergen und gleichzeitig die Vergleichbarkeit für den ursprünglichen Typ aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen, die jeweils einen anderen Aspekt des Artikels hervorheben: Konzentration auf das Problem: * Wie kann verhindert werden, dass ein Typ in Go als Kartenschlüssel verwendet wird? * Warum können Sie MyStruct nicht verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!