Null-Schnittstellen in Zeiger in Go konvertieren
In Go kann die Konvertierung einer Null-Schnittstelle in einen Zeiger eines bestimmten Typs zu einem Fehler führen . Im bereitgestellten Beispielcode:
type Nexter interface { Next() Nexter } type Node struct { next Nexter } func (n *Node) Next() Nexter {...} func main() { var p Nexter var n *Node fmt.Println(n == nil) // prints true n = p.(*Node) // fails }
Dies schlägt fehl, weil eine statische Schnittstelle (Nexter) Werte verschiedener dynamischer Typen, einschließlich Null, enthalten kann. Die Typzusicherung (p.(*Node)) kann nicht für einen Null-Schnittstellenwert durchgeführt werden.
Es ist jedoch möglich, einem Zeiger eines bestimmten Typs direkt einen Nullwert zuzuweisen:
n = (*Node)(nil)
Dadurch wird n ein Nullwert mit dem dynamischen Typ *Node zugewiesen.
Um Null-Schnittstellenwerte zu verarbeiten, können Sie diese überprüfen explizit:
if p != nil { n = p.(*Node) // only succeeds if p contains a value of type *Node }
Alternativ können Sie die Form „Komma-OK“ verwenden:
if n, ok := p.(*Node); ok { // n is not nil and holds a value of type *Node }
Die Verwendung der Form „Komma-OK“ stellt sicher, dass die Behauptung niemals fehlschlägt und einen booleschen Wert zurückgibt ob die Behauptung gilt, statt Panik auszulösen. Dadurch können Sie sowohl Null- als auch Nicht-Null-Schnittstellenwerte sicher verarbeiten.
Das obige ist der detaillierte Inhalt vonWie konvertiert man Null-Schnittstellen in Go sicher in Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!