Détection de valeurs vides à l'aide de Reflection dans Go
Dans Go, il peut être essentiel de savoir si une valeur d'interface{}, qui peut contenir de tout type, est vide ou non initialisé. Une valeur interface{} vide peut contenir des valeurs telles que 0, "", false ou nil. Déterminer ce vide peut être crucial pour la validation des données et les assertions de type. Un moyen efficace d'y parvenir est la réflexion.
Pour vérifier si une valeur d'interface{} est vide, nous pouvons utiliser la fonction IsZeroOfUnderlyingType :
func IsZeroOfUnderlyingType(x interface{}) bool { return x == reflect.Zero(reflect.TypeOf(x)).Interface() }
Il est crucial de comprendre la différence entre :
La fonction IsZeroOfUnderlyingType vérifie le deuxième cas. Cependant, cela peut ne pas fonctionner pour tous les types en raison de son utilisation de ==, qui ne fonctionne que pour des types comparables.
Pour résoudre cette limitation, nous pouvons modifier la fonction pour utiliser à la place reflect.DeepEqual(), qui peut gérer tous les types :
func IsZeroOfUnderlyingType(x interface{}) bool { return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface()) }
Avec cette fonction améliorée, nous pouvons désormais déterminer de manière fiable si une valeur d'interface{} est vide, quel que soit son type sous-jacent.
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!