Heim >Backend-Entwicklung >Golang >Wie konvertiert man in Go sicher eine Nil-Schnittstelle in einen Zeiger?
Fehler bei der Konvertierung einer Nullschnittstelle in einen Zeiger in GoLang
In GoLang wird versucht, eine Nullschnittstelle in einen Zeiger eines bestimmten Typs zu konvertieren, z unten dargestellt, löst einen Fehler aus:
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) // true n = p.(*Node) // error }
Dieser Fehler tritt auf, weil es sich um eine statische Variable vom Schnittstellentyp handelt (z. B. Nexter) kann Werte verschiedener dynamischer Typen enthalten, einschließlich Null. Während es möglich ist, mit (*Node)(nil) einen Nullwert in einen Zeiger umzuwandeln, kann die Typzusicherung, wie sie im Beispiel verwendet wird, nicht angewendet werden, weil:
x.(T)
erfordert, dass x nicht- ist. nil und vom Typ T. In diesem Fall kann p Werte verschiedener Typen oder nil enthalten.
Stattdessen können explizite Prüfungen erfolgen beschäftigt:
if p != nil { n = p.(*Node) // succeeds if p contains a *Node value }
Alternativ bietet die „Komma-OK“-Form eine sicherere Option:
if n, ok := p.(*Node); ok { fmt.Printf("n=%#v\n", n) }
Die Verwendung der „Komma-OK“-Form ermöglicht die Verarbeitung von Null- und Nicht- Null-Schnittstellenwerte, ohne eine Panik auszulösen.
Das obige ist der detaillierte Inhalt vonWie konvertiert man in Go sicher eine Nil-Schnittstelle in einen Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!