Maison > développement back-end > Golang > Comment détecter efficacement les valeurs zéro dans les interfaces Go à l'aide de Reflection ?

Comment détecter efficacement les valeurs zéro dans les interfaces Go à l'aide de Reflection ?

Barbara Streisand
Libérer: 2024-12-12 18:45:15
original
624 Les gens l'ont consulté

How to Efficiently Detect Zero Values in Go Interfaces Using Reflection?

Détection efficace des valeurs vides dans Go à l'aide de Reflection

Lorsque vous traitez des valeurs d'interface{} dans Go et devez déterminer si elles ne sont pas initialisées ( c'est-à-dire avoir une valeur de 0, "", faux ou nul), la réflexion offre une solution pratique. Voici comment y parvenir :

func IsZeroOfUnderlyingType(x interface{}) bool {
    return x == reflect.Zero(reflect.TypeOf(x)).Interface()
}
Copier après la connexion

Il est crucial de différencier deux concepts distincts :

  • Valeur d'interface nulle : Une valeur d'interface sans sous-jacent value (la valeur zéro d'un type d'interface).
  • Valeur d'interface non nulle avec valeur sous-jacente nulle : Une valeur d'interface avec une valeur sous-jacente, mais cette valeur est la valeur zéro de son type (par exemple, carte nulle, pointeur nul, nombre 0).

La fonction ci-dessus vérifie le deuxième cas, où la valeur sous-jacente est zéro.

Considération pour les types non comparables

La fonction utilise le == opérateur, qui peut ne pas fonctionner pour des types non comparables. Pour résoudre ce problème, vous pouvez utiliser à la place reflect.DeepEqual() :

func IsZeroOfUnderlyingType(x interface{}) bool {
    return reflect.DeepEqual(x, reflect.Zero(reflect.TypeOf(x)).Interface())
}
Copier après la connexion

Cette fonction mise à jour fonctionnera correctement avec tous les types, y compris les types non comparables.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal