Maison > développement back-end > Golang > Comment obtenir le type Reflect.Interface pour un type Go basé sur un type primitif ?

Comment obtenir le type Reflect.Interface pour un type Go basé sur un type primitif ?

Barbara Streisand
Libérer: 2024-12-25 08:43:09
original
564 Les gens l'ont consulté

How to Get reflect.Interface Kind for a Go Type Based on a Primitive Type?

Comment obtenir le type Reflect.Interface pour un type basé sur un type primitif

Dans Go, lorsque vous travaillez avec des types qui implémentent des interfaces mais s'appuyant sur des types primitifs dans leur implémentation, il devient nécessaire d'obtenir le reflet.Kind comme reflet.Interface. Cet article répond à ce besoin et propose une solution.

Le problème

Considérez la situation suivante :

type ID interface {
    myid()
}

type id string

func (id) myid() {}
Copier après la connexion

Ici, l'ID est une interface implémenté par id, qui est une chaîne. Lorsque nous utilisons réfléchissant.TypeOf(id) pour obtenir le descripteur de type, le résultat n'est pas le reflet.Interface souhaité mais plutôt un reflet.String.

La solution

Pour contourner ce problème, il est nécessaire de passer un pointeur vers la valeur de l'interface au lieu de la valeur elle-même à réflexion.TypeOf(). Cela empêche l'encapsulation implicite de la valeur dans une interface{}.

id := ID(id("test"))

t := reflect.TypeOf(&id).Elem()
fmt.Println(t.Kind()) // Output: "interface"
Copier après la connexion

Dans cet exemple, reflect.TypeOf(&id) renvoie un pointeur vers la valeur de l'interface, qui est ensuite déballée à l'aide d'Elem() pour obtenir le descripteur de type de l’interface elle-même. Cette approche fournit le reflet souhaité.Type d'interface.

Remarque supplémentaire

La même technique peut être utilisée pour obtenir tout type de reflet.Type qui renvoie le reflet.Interface lorsque appelant Kind(). Passez simplement un pointeur vers la valeur ou le type à refléter.TypeOf().

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