Heim > Backend-Entwicklung > Golang > Wie konvertiert man Null-Schnittstellen in Go sicher in Zeiger?

Wie konvertiert man Null-Schnittstellen in Go sicher in Zeiger?

Barbara Streisand
Freigeben: 2024-12-04 08:01:12
Original
242 Leute haben es durchsucht

How to Safely Convert Nil Interfaces to Pointers in Go?

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
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

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