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
Libérer: 2024-12-04 08:01:12
original
254 Les gens l'ont consulté

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
}
Copier après la connexion

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)
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal