Sobes.tech
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 Variable x vom Typ leere Schnittstelle, die standardmäßig nil ist, also keinen Typ oder Wert enthält.
  • Wenn man x einen Wert zuweist, zum Beispiel x = 5, ist x nicht mehr nil, da es den Typ int und den Wert 5 enthä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.