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
Barbara Streisandoriginal
2024-12-12 18:45:15530parcourir

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

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

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