Maison > développement back-end > Golang > Comment puis-je détecter rapidement les valeurs vides dans les interfaces Go à l'aide de Reflection ?

Comment puis-je détecter rapidement les valeurs vides dans les interfaces Go à l'aide de Reflection ?

Patricia Arquette
Libérer: 2024-12-14 06:54:49
original
258 Les gens l'ont consulté

How Can I Quickly Detect Empty Values in Go Interfaces Using Reflection?

Détection rapide des valeurs vides via la réflexion dans Go

Lorsque vous traitez avec des interfaces qui stockent des valeurs int, string, bool ou autres, il est souvent nécessaire pour déterminer si la valeur stockée n’est pas initialisée. Cela signifie vérifier s'il est égal à l'un des éléments suivants :

  • 0 (pour int)
  • "" (pour chaîne)
  • false (pour bool)
  • nil (pour les pointeurs et autres références types)

Solution :

Pour vérifier efficacement cela dans Go, vous pouvez utiliser la réflexion et la fonction Reflect.Zero() :

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

Explication :

  • reflect.TypeOf(x) récupère les informations de type de la valeur d'interface x.
  • reflect.Zero(reflect.TypeOf(x)) crée une valeur zéro de ce type.
  • Interface() reconvertit la valeur zéro en une valeur d'interface.
  • La comparaison de x avec la valeur zéro à l'aide de l'opérateur == vérifie si la valeur stockée est vide (c'est-à-dire non initialisé).

Remarque :

La solution originale utilisée == à des fins de comparaison, ce qui pourrait ne pas fonctionner pour des types qui ne sont pas comparables. Pour garantir une compatibilité universelle, 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

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!

source:php.cn
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