Heim > Artikel > Backend-Entwicklung > Warum führt der Vergleich eines Null-Slices mit einer Schnittstelle{} zu einem anderen Ergebnis als der direkte Vergleich eines Null-Slices mit Null?
Nil-Slice an die Schnittstelle übergeben: Das Rätsel lösen
In Go kann die Unterscheidung zwischen einem Null-Slice und einer Null-Schnittstelle{} einen Wert haben zu unerwarteten Ergebnissen führen. Betrachten Sie den folgenden Spielplatzauszug:
<code class="go">package main import "fmt" func main() { var i []int = nil yes(i) // true no(i) // false } func yes(thing []int) { fmt.Println(thing == nil) } func no(thing interface{}) { fmt.Println(thing == nil) }</code>
Warum erzeugen diese Funktionen unterschiedliche Ausgaben?
Schnittstelle verstehen{}
Eine Schnittstellenvariable{} ähnelt einer Struktur mit zwei Feldern: Typ und Daten. In diesem Fall sieht es aus wie {[]int (type), nil (data)}.
Nil Slice vs. Nil Interface
In ja, das Null Slice wird direkt übergeben. Der Vergleich prüft, ob nil gleich nil ist, was als true ausgewertet wird.
In no wird das Null-Slice in eine Schnittstelle {} eingeschlossen, was zu {[]int (type), nil (data)} führt. Beim Vergleich dieser Schnittstelle mit Null wird überprüft, ob der Typ Null ist, was nicht der Fall ist. Daher ist die Ausgabe falsch.
Grund für den Unterschied
Dieses Verhalten ergibt sich aus der Tatsache, dass Schnittstellen sowohl Typ als auch Wert kapseln. Beim Vergleich einer Schnittstelle mit Null wird nach einem Nulltyp gesucht, während der Vergleich des zugrunde liegenden Datenwerts anders ist. Im Fall von „Nein“ ist der Typ nicht Null, sodass der Vergleich „Falsch“ zurückgibt.
Schlussfolgerung
Das scheinbar paradoxe Verhalten ist auf die subtilen Unterschiede zwischen Null-Slices zurückzuführen und keine Schnittstellen. Das Verständnis dieser Unterscheidung ist entscheidend, um Verwirrung bei der Arbeit mit Schnittstellen in Go zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum führt der Vergleich eines Null-Slices mit einer Schnittstelle{} zu einem anderen Ergebnis als der direkte Vergleich eines Null-Slices mit Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!