Dans Go, la gestion des valeurs stockées dans les interfaces peut parfois s'avérer difficile, en particulier lorsqu'il s'agit de déterminer si la valeur représente un état non initialisé ou est vraiment vide. Explorons une méthode rapide et efficace pour détecter de telles valeurs vides par réflexion.
Pour y parvenir, nous pouvons tirer parti du package Reflect. Sa fonction Zero renvoie la valeur zéro pour un type donné. En comparant une valeur d'interface à la valeur zéro de son type sous-jacent, nous pouvons déterminer si l'interface contient une valeur non initialisée :
func IsZeroOfUnderlyingType(x interface{}) bool { return x == reflect.Zero(reflect.TypeOf(x)).Interface() }
N'oubliez pas qu'une interface peut soit être nulle (sans valeur sous-jacente), soit contenir une valeur qui peut être nulle pour son type sous-jacent. Ce code vérifie spécifiquement ce dernier cas.
À l'origine, nous utilisions l'opérateur == à des fins de comparaison. Cependant, cette approche échoue pour les types qui manquent de comparabilité. En utilisant à la place réfléchit.DeepEqual, nous garantissons la compatibilité avec tous les types :
func IsZeroOfUnderlyingType(x interface{}) bool { return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface()) }
Désormais, vous pouvez facilement vérifier les valeurs vides dans les interfaces, quel que soit leur type sous-jacent, en appelant cette fonction. Il identifie efficacement les éléments non initialisés ou de valeur nulle, vous offrant ainsi un plus grand contrôle et une plus grande flexibilité dans votre code Go.
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!