Maison > développement back-end > Golang > Comment déterminer le « reflect.Kind » d'un type d'interface dérivé dans Go ?

Comment déterminer le « reflect.Kind » d'un type d'interface dérivé dans Go ?

Susan Sarandon
Libérer: 2025-01-02 12:34:40
original
322 Les gens l'ont consulté

How to Determine the `reflect.Kind` of a Derived Interface Type in Go?

Déterminer le type d'un type d'interface dérivé dans Go

Naviguer dans les complexités de la réflexion dans Go peut être difficile, en particulier lorsqu'il s'agit de interfaces et types primitifs. Dans cet article, nous allons explorer comment déterminer le type de réflexion qui implémente une interface mais qui a une implémentation primitive sous-jacente.

La question découle de l'extrait de code suivant :

type ID interface {
    myid()
}

type id string

func (id) myid() {}

func main() {
    id := ID(id("test"))

    fmt.Println(id)
    fmt.Println(reflect.TypeOf(id))

    // How to get the kind to return "reflect.Interface" from the var "id"?
    fmt.Println(reflect.TypeOf(id).Kind())
}
Copier après la connexion

Dans ce scénario, nous avons une interface appelée ID et un type de chaîne appelé id. Cependant, l’implémentation du type id utilise le type chaîne id. Le but est de récupérer le reflet.Kind comme réfléchissant.Interface à partir de la variable id.

Solution

La clé pour résoudre ce problème réside dans la compréhension de la façon dont la réflexion gère l'interface valeurs. Lorsque vous transmettez une valeur à réflexion.TypeOf(), elle est automatiquement encapsulée dans une interface {}. Cependant, pour conserver les informations de type, il faut utiliser un pointeur vers l'interface.

En définissant un pointeur vers l'interface ID et en le passant à réflexion.TypeOf(), nous pouvons obtenir le descripteur de type en utilisant Elem( ) pour accéder au descripteur de type réel du type d'interface.

Exemple de code

L'extrait de code suivant démontre la solution :

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

fmt.Println(id)
t := reflect.TypeOf(&id).Elem()
fmt.Println(t)

fmt.Println(t.Kind())
Copier après la connexion

Ce code affichera :

test
main.ID
interface
Copier après la connexion

En utilisant cette technique, nous pouvons déterminer avec précision le type de réflexion des types d'interfaces dérivés et découvrir leurs détails d'implémentation sous-jacents .

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