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

Wie kann verhindert werden, dass ein Typ in Go als Kartenschlüssel verwendet wird?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 02:28:31319Durchsuche

How to Prevent a Type from Being Used as a Map Key in Go?

Verhindern der Typverwendung als Map-Schlüssel

Problem: Versuche, einen Typ als Map-Schlüssel zu verwenden, führen trotz der Kompilierzeit zu Fehlern Typ, der ein privates Mitglied enthält. Wie kann dieses Problem gelöst werden?

Antwort:

Auch wenn es nicht unbedingt von Vorteil ist, die Verwendung eines Typs als Kartenschlüssel zu verhindern, gibt es bestimmte Umstände die eine solche Maßnahme erforderlich machen. Gemäß der Sprachspezifikation müssen Kartenschlüssel bestimmte Vergleichsregeln einhalten. Hier sind zwei Methoden, um zu verhindern, dass ein Typ als Kartenschlüssel verwendet wird:

Methode 1: Nicht vergleichbares Feld einbetten

Die einfachste Lösung besteht darin, ein Feld einzubetten innerhalb des Typs, dessen Typ nicht vergleichbar ist, z. B. ein Slice, eine Karte oder eine Funktion. Dies verstößt gegen die Anforderungen des Vergleichsoperators für Kartenschlüssel und macht den Typ ungeeignet. Zum Beispiel:

<code class="go">type MyType struct {
    S string
    i int
    notComparable []int
}</code>

Methode 2: Verwenden Sie einen Wrapper-Typ

Alternativ kann man einen Wrapper-Typ erstellen, der den ursprünglichen Typ einbettet und einen nicht vergleichbaren Typ hinzufügt Feld. Dieser Wrapper-Typ kann an anderer Stelle verwendet werden, während der ursprüngliche Typ seine Vergleichbarkeit behält. Zum Beispiel:

<code class="go">type myType struct {
    S string
    i int
}

type MyType struct {
    myType
    notComparable []int
}</code>

Hinweis:

Es ist wichtig, die möglichen Auswirkungen der Verhinderung der Typverwendung als Kartenschlüssel zu berücksichtigen. Im Fall der Methode „Nicht vergleichbares Feld einbetten“ wird ein nicht vergleichbares Feld eingeführt, was Auswirkungen auf Vergleichsvorgänge haben kann, die den Typ betreffen.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass ein Typ in Go als Kartenschlüssel verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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