Heim >Backend-Entwicklung >Golang >Warum können Funktionen in Go nicht als Kartenschlüssel verwendet werden?

Warum können Funktionen in Go nicht als Kartenschlüssel verwendet werden?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 18:27:29610Durchsuche

Why Can't Functions Be Used as Map Keys in Go?

Funktionstasten in Karten

Dieser Artikel untersucht die Einschränkungen bei der Verwendung von Funktionen als Kartentasten in der Programmiersprache Go.

Das Problem

Betrachten Sie den folgenden hypothetischen Go-Code:

type Action func(int)
func test(a int) { }
func test2(a int) { }

func main() {
  x := map[Action]bool{}
  x[test] = true
  x[test2] = false
}

Wenn Sie versuchen, diesen Code zu kompilieren, wird eine Fehlermeldung angezeigt, die darauf hinweist, dass der Kartenschlüssel ungültig ist Typ Aktion.“

Die Antwort

Die Go-Sprachspezifikation verbietet ausdrücklich die Verwendung von Funktionen, Karten und Slices als Kartenschlüssel. Konkret heißt es in der Spezifikation:

„Die Vergleichsoperatoren == und != müssen für Operanden des Schlüsseltyps vollständig definiert sein; daher darf der Schlüsseltyp keine Funktion, Map oder Slice sein.“

Diese Einschränkung besteht, da die Gleichheitsvergleichsoperatoren (== und !=) für den Schlüsseltyp genau definiert sein müssen. Funktionen, Maps und Slices sind keine geeigneten Schlüsseltypen, da ihr Gleichheitsvergleich nicht vollständig definiert ist.

Schlussfolgerung

Obwohl es verlockend sein kann, Funktionen als Map-Schlüssel zu verwenden , ist in Go aufgrund der Notwendigkeit klar definierter Gleichheitsvergleiche nicht zulässig. Daher sollten Sie als Map-Schlüssel andere geeignete Typen wie Strings, Integer oder Strukturen verwenden.

Das obige ist der detaillierte Inhalt vonWarum können Funktionen in Go nicht als Kartenschlüssel verwendet werden?. 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