Maison > développement back-end > Golang > Comment gérer en toute sécurité les valeurs nulles dans les structures Go imbriquées ?

Comment gérer en toute sécurité les valeurs nulles dans les structures Go imbriquées ?

Linda Hamilton
Libérer: 2024-12-26 17:03:14
original
425 Les gens l'ont consulté

How to Safely Handle Nil Values in Nested Go Structs?

Test des valeurs nulles dans des structures complexes dans Go

Lorsque vous traitez des structures profondément imbriquées dans Go qui peuvent contenir des champs facultatifs ou omis, le la présence de valeurs nulles peut devenir préoccupante. Pour résoudre ce problème, on est généralement confronté à l'ennui d'écrire plusieurs instructions if pour vérifier les références nulles potentielles. Cela peut prendre du temps et être sujet aux erreurs.

Une approche plus élégante et plus efficace pour gérer cette situation consiste à utiliser des récepteurs de pointeurs dans des méthodes getter personnalisées. Cette technique est adoptée dans le code Go généré par protobuf et permet un chaînage naturel des appels de méthode sans se soucier des erreurs de déréférencement de pointeur nul.

Dans l'exemple fourni, les structures Bar et Baz sont utilisées comme pointeurs. En ajoutant des getters à ces structures, nous pouvons gérer les références nulles en toute sécurité :

func (b *Bar) GetBaz() *Baz {
    if b == nil {
        return nil
    }
    return b.Baz
}

func (b *Baz) GetBaz() string {
    if b == nil {
        return ""
    }
    return b.Baz
}
Copier après la connexion

Ces méthodes getter effectuent une vérification nulle sur le récepteur avant de tenter d'accéder à des champs. Si le récepteur est nul, il renvoie la valeur zéro pour le type de résultat.

Avec ces méthodes getter en place, tester les valeurs nulles devient simple :

fmt.Println(f3.Bar.GetBaz().GetBaz()) // No panic
fmt.Println(f2.Bar.GetBaz().GetBaz()) // No panic
fmt.Println(f1.Bar.GetBaz().GetBaz()) // No panic

if baz := f2.Bar.GetBaz(); baz != nil {
    fmt.Println(baz.GetBaz())
} else {
    fmt.Println("something nil")
}
Copier après la connexion

Cette approche fournit un générique et une solution sûre pour tester des valeurs nulles dans des structures imbriquées, éliminant le besoin d'instructions if répétitives et minimisant le risque d'erreurs d'exécution dues au déréférencement de pointeur nul.

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