Maison > développement back-end > Golang > Comment puis-je effectuer une assertion de type à l'aide de « reflect.TypeOf() » dans Go ?

Comment puis-je effectuer une assertion de type à l'aide de « reflect.TypeOf() » dans Go ?

Susan Sarandon
Libérer: 2024-12-20 10:40:10
original
137 Les gens l'ont consulté

How Can I Perform Type Assertion Using `reflect.TypeOf()` in Go?

Assertion de type utilisant Reflect.TypeOf() dans Go

Lorsque vous travaillez avec des interfaces dans Go, il peut parfois être nécessaire de déterminer le type de la valeur sous-jacente. C’est là que le package Reflect entre en jeu. La fonction Reflect.TypeOf() peut être utilisée pour obtenir le type d'une valeur d'interface. Cependant, l'assertion de type nécessite un type spécifique, pas seulement un objet Type.

Problème

Dans le code fourni, une tentative est faite pour effectuer une assertion de type sur le résultat de réflexion.TypeOf( i):

item2 := i.(reflect.TypeOf(i)) // reflect.TypeOf(i) is not a type
Copier après la connexion

Cette ligne échouera car reflex.TypeOf(i) renvoie un objet Type, pas un type spécifique qui peut être utilisé pour le type assertion.

Solution

Il existe plusieurs façons d'aborder ce scénario. Une option consiste à utiliser un commutateur de type sur la valeur de l'interface elle-même, comme suggéré dans la réponse :

switch x.(type){
  case int: 
    dosomething()
}
Copier après la connexion

Cette approche vérifie le type de la valeur stockée dans l'interface et effectue des actions en conséquence. Cela ne nécessite pas de réflexion de type.

Alternativement, si vous avez spécifiquement besoin d'accéder et d'activer le type d'attributs dans l'interface, vous pouvez utiliser l'approche suivante :

s := reflect.ValueOf(x)
for i:=0; i<s.NumValues; i++{
  switch s.Field(i).Interface().(type){
    case int: 
      dosomething()
  }
}
Copier après la connexion

Cela implique parcourir les champs de l'interface, obtenir leurs valeurs et effectuer une vérification de type sur ces valeurs.

Bien que cette approche ne soit pas aussi concise que l'utilisation d'un commutateur de type sur l'interface valeur elle-même, elle permet plus de flexibilité dans la gestion des différents types d'attributs au sein de l'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!

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