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
Patricia Arquetteoriginal
2024-12-14 06:54:49260parcourir

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()
}

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())
}

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:
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