Heim > Artikel > Backend-Entwicklung > Warum ist ein an eine Schnittstelle in Go übergebenes Null-Slice nicht gleich Null?
Das Null-Slice-Paradoxon in Go-Schnittstellen verstehen
Warum ist das Ergebnis nicht Null, wenn ein Null-Slice als Schnittstelle übergeben wird? Dieses rätselhafte Verhalten kann durch das Verständnis der zugrunde liegenden Implementierung von Go-Schnittstellen erklärt werden.
In Go ist eine Interface{}-Variable im Wesentlichen eine Doppelfeldstruktur, die aus einem Typdeskriptor und einem Datenwert besteht, wie durch die veranschaulicht Iface struct:
struct Iface { Itab* tab; void* data; };
Jetzt analysieren wir die beiden Funktionsaufrufe im bereitgestellten Code:
<code class="go">yes([]int{}) // output: true no([]int{}) // output: false</code>
ja Funktion:
In Bei der Funktion „yes“ wird der Wert []int{} als Parameter thing übergeben. Da „yes“ nur einen Slice-Parameter akzeptiert, behandelt der Compiler „nil“ als Slice mit dem Wert Null. Somit wird aus der Vergleichssache == nil nil == nil, was true zurückgibt.
no Function:
Im Gegensatz dazu erwartet die no-Funktion eine Schnittstelle{} Parameter. Wenn Sie den Wert []int{} übergeben, verpackt Go ihn automatisch in einen Interface{}-Typ. Konvertieren Sie es effektiv in interface{[]int, nil}. Das Vergleichsding == nil wird jetzt zu interface{[]int, nil} == nil ausgewertet, was „false“ ergibt.
Dieses Verhalten wird in den Go-FAQs weiter erläutert, in denen erklärt wird, dass „Schnittstellen, die nil enthalten, nur“ sind gleich Null, wenn alle ihre Mitglieder Null sind“ (d. h. im Fall dieses Beispiels kann []int (das Typmitglied) nicht Null sein).
Daher ist es beim Umgang mit Null-Slices in Schnittstellen so Es ist wichtig, sich dieser Eigenart bewusst zu sein und die zugrunde liegende Implementierung zu berücksichtigen, um das Verhalten richtig zu interpretieren.
Das obige ist der detaillierte Inhalt vonWarum ist ein an eine Schnittstelle in Go übergebenes Null-Slice nicht gleich Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!