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 }
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") }
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!