Junior — Middle
Worin besteht der Unterschied zwischen der Ausdruck einer leeren Schnittstelle und dem Wert nil in der Programmiersprache Go?
sobes.tech KI
Antwort von AI
In der Programmiersprache Go ist die leere Schnittstelle (interface{}) ein Typ, der einen Wert beliebigen Typs enthalten kann, einschließlich nil. Allerdings sind die Ausdrucksweise der leeren Schnittstelle und der Wert nil zwei verschiedene Dinge.
var x interface{}— eine Variablexvom Typ leere Schnittstelle, die standardmäßignilist, also keinen Typ oder Wert enthält.- Wenn man
xeinen Wert zuweist, zum Beispielx = 5, istxnicht mehrnil, da es den Typintund den Wert5enthält.
Der Unterschied besteht darin, dass die Schnittstelle in Go intern durch zwei Zeiger dargestellt wird: einen auf den Typ und einen auf den Wert. Die Schnittstelle ist nur dann gleich nil, wenn beide Zeiger nil sind.
Beispiel:
var i interface{} // i == nil
var p *int = nil
i = p // i != nil, da der Typ *int vorhanden ist, auch wenn der Wert `nil` ist
fmt.Println(i == nil) // false
Daher kann eine leere Schnittstelle einen nil-Wert eines bestimmten Typs enthalten, aber die Schnittstelle selbst ist nicht gleich nil. Dies ist ein wichtiger Punkt bei nil-Prüfungen in Go.