Test de valeurs nulles dans des structures imbriquées
Lorsque vous travaillez avec des structures imbriquées dans Go, il est courant de rencontrer des scénarios dans lesquels certains champs peuvent être nuls en raison du déclassement "omitemptyempty". Cela nécessite une méthode pour accéder de manière fiable aux champs profondément imbriqués sans déclencher de paniques à l'exécution.
Test générique nul
Une approche courante consiste à vérifier manuellement les valeurs nulles à l'aide d'instructions if. Cependant, cela peut devenir fastidieux, surtout pour les structures profondément imbriquées. Une solution plus générique consiste à implémenter des getters avec des récepteurs de pointeurs dans les structures pouvant contenir des champs nuls.
Fonctions Getter
Par exemple, en considérant les fonctions Foo, Bar et Structures Baz :
type Bar struct { Bar string Baz *Baz } type Baz struct { Baz string }
Nous pouvons définir les getters comme suit :
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 }
Utilisation des getters
Avec ces getters, nous pouvons accéder aux champs imbriqués sans erreurs d'exécution, même si certains champs sont nuls :
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") }
Cette approche garantit la sécurité des types et élimine les paniques d'exécution associées à l'accès aux pointeurs nuls. Il fournit également une manière plus concise et élégante de gérer les valeurs nulles imbriquées.
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!