Heim > Backend-Entwicklung > Golang > Warum ist „nil([]int)' gleich „nil', aber „nil(interface{})' nicht?

Warum ist „nil([]int)' gleich „nil', aber „nil(interface{})' nicht?

Patricia Arquette
Freigeben: 2024-11-03 07:20:03
Original
764 Leute haben es durchsucht

Why Does `nil([]int)` Equal `nil`, But `nil(interface{})` Doesn't?

Nil-Slice vs. Nil-Schnittstelle

In Go ist ein Null-Slice nicht dasselbe wie eine Null-Schnittstelle. Dieses Verhalten wird im folgenden Code demonstriert:

<code class="go">package main

import "fmt"

func main() {
    var i []int = nil
    yes(i) // output: true
    no(i)  // output: false
}

func yes(thing []int) {
    fmt.Println(thing == nil)
}

func no(thing interface{}) {
    fmt.Println(thing == nil)
}</code>
Nach dem Login kopieren

Der Unterschied in der Ausgabe zwischen den beiden Funktionen liegt an der Art und Weise, wie Go mit Schnittstellentypen umgeht.

Schnittstellentypen

Ein Schnittstellentyp in Go ist eine Sammlung von Methoden, die durch einen bestimmten Werttyp implementiert werden können. Wenn eine Interface{}-Variable verwendet wird, kann sie jeden Wert eines beliebigen Typs enthalten, der die Schnittstelle implementiert.

Nil Interface

Wenn eine Interface{}-Variable zugewiesen wird auf Null gesetzt, wird das Datenfeld der Schnittstelle auf Null gesetzt, das Typfeld jedoch nicht. Daher ist eine Nullschnittstelle nicht gleich Null.

Nil Slice

Andererseits ist ein Null-Slice einfach ein Slice ohne Elemente. Wenn Sie ein Null-Slice mit Null vergleichen, wird der Vergleich als wahr ausgewertet, da sowohl die Daten- als auch die Typfelder des Slice auf Null gesetzt sind.

Schlussfolgerung

Daher gilt: Der Unterschied in der Ausgabe zwischen den beiden Funktionen im Codebeispiel ist auf die Tatsache zurückzuführen, dass nil([]int) ein Null-Slice ist, während nil(interface{}) eine Null-Schnittstelle ist. Ein Null-Slice wird im Vergleich zu Null als wahr ausgewertet, während eine Null-Schnittstelle als falsch ausgewertet wird.

Das obige ist der detaillierte Inhalt vonWarum ist „nil([]int)' gleich „nil', aber „nil(interface{})' nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage