Test des valeurs nulles dans les structures imbriquées
Les structures imbriquées dans Go sont un phénomène courant, en particulier lorsqu'il s'agit de données non rassemblées à partir de JSON. Cependant, ces structures ont souvent des champs « omitomitempty », ce qui entraîne un mélange de valeurs non nulles et nulles à différents niveaux.
Pour résoudre ce problème, il existe deux approches courantes :
1. Vérification manuelle nulle :
Cela implique de vérifier explicitement les valeurs nulles à chaque niveau, en utilisant des instructions if telles que :
if f2.Bar != nil && f2.Bar.Baz != nil { fmt.Println(f2.Bar.Baz.Baz) }
Cette méthode est simple mais peut devenir répétitive et fastidieuse pour les personnes en profondeur. structures imbriquées.
2. Getters pour les récepteurs de pointeurs :
Une approche plus élégante et efficace consiste à définir des méthodes getter pour les champs utilisés comme pointeurs dans la structure. Ces getters vérifient si le récepteur est nul et renvoient la valeur zéro si c'est le cas. Sinon, ils renvoient la valeur du champ.
Par exemple, en utilisant des getters pour les structures Bar et Baz :
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 }
Avec des getters dans place, la vérification des valeurs nulles devient simplifiée :
fmt.Println(f3.Bar.GetBaz().GetBaz()) // No panic if baz := f2.Bar.GetBaz(); baz != nil { fmt.Println(baz.GetBaz()) }
Cette méthode élimine le besoin d'instructions if répétitives et garantit que le déréférencement des pointeurs nuls n'entraîne jamais de panique à l'exécution. Il s'aligne également sur l'approche utilisée dans le code Go généré pour les messages protobuf, offrant un moyen naturel et cohérent de gérer les valeurs nulles dans des structures complexes.
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!