Maison >développement back-end >Golang >Comment convertir en toute sécurité des interfaces nulles en pointeurs dans Go ?

Comment convertir en toute sécurité des interfaces nulles en pointeurs dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-04 08:01:12267parcourir

How to Safely Convert Nil Interfaces to Pointers in Go?

Conversion d'interfaces nulles en pointeurs dans Go

Dans Go, la conversion d'une interface nulle en pointeur d'un type spécifique peut entraîner une erreur . Dans l'exemple de code fourni :

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
}

Cela échoue car une interface statique (Nexter) peut contenir des valeurs de différents types dynamiques, y compris nul. L'assertion de type (p.(*Node)) ne peut pas être effectuée sur une valeur d'interface nulle.

Cependant, il est possible d'attribuer directement une valeur nulle à un pointeur d'un type spécifique :

n = (*Node)(nil)

Cela attribue une valeur nulle avec le type dynamique *Node à n.

Pour gérer les valeurs d'interface nulles, vous pouvez les vérifier explicitement :

if p != nil {
    n = p.(*Node) // only succeeds if p contains a value of type *Node
}

Vous pouvez également utiliser le formulaire "virgule-ok" :

if n, ok := p.(*Node); ok {
    // n is not nil and holds a value of type *Node
}

L'utilisation du formulaire "virgule-ok" garantit que l'assertion n'échoue jamais et renvoie un booléen indiquant si l'affirmation tient au lieu de provoquer la panique. Cela vous permet de gérer en toute sécurité les valeurs d'interface nulles et non nulles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn