Utilisation de Reflection pour la vérification de type dans Go
Lorsque vous traitez des interfaces dans Go, il est parfois nécessaire d'identifier le type spécifique sous-jacent à la valeur de l'interface . Par exemple, vous souhaiterez peut-être faire la différence entre une structure avec une valeur de chaîne et d'autres types.
Reflect.TypeOf renvoie un Type, qui est un descripteur pour un type donné. Cependant, réaffirmer le type en un type peut être difficile.
Identification de la valeur du type d'interface
L'extrait de code fourni identifie une structure avec une valeur de chaîne à l'aide de l'instruction switch dans la fonction IdentifierItemType. Il s'agit d'une approche simple pour les scénarios simples dans lesquels l'interface est explicitement convertie en type cible. Cependant, lors de l'utilisation de la réflexion, le Type renvoyé par Reflect.TypeOf ne peut pas être directement affirmé à un type.
Approche alternative
Au lieu d'essayer d'obtenir une assertion de type avec Type directement, il existe d'autres moyens de gérer cette situation efficacement :
switch x.(type) { case int: dosomething() }
s := reflect.ValueOf(x) for i := 0; i < s.NumFields(); i++ { switch s.Field(i).Interface().(type) { case int: dosomething() } }
Cette approche vous permet de parcourir chaque champ de l'interface et d'examiner le type sous-jacent de chaque individu. valeur.
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!