Maison > développement back-end > Golang > Comment puis-je récupérer le « reflect.Kind » d'un type d'interface sous-jacent à une primitive dans Go ?

Comment puis-je récupérer le « reflect.Kind » d'un type d'interface sous-jacent à une primitive dans Go ?

Barbara Streisand
Libérer: 2024-12-24 06:45:31
original
928 Les gens l'ont consulté

How Can I Retrieve the `reflect.Kind` of an Interface Type Underlying a Primitive in Go?

Récupérer Reflect.Kind pour les types basés sur des primitives : une explication détaillée

Souvent, les développeurs rencontrent le besoin de déterminer le reflet.Kind of un type qui a une implémentation sous-jacente basée sur un type primitif, tel que :

type ID interface {
    myid()
}

type id string

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

Dans l'exemple ci-dessus, le type "id" implémente l'interface "ID" en utilisant une primitive de chaîne sous-jacente. Le défi réside dans la récupération de la valeur réflexion.Interface au lieu du type réflexion.String par défaut.

Dévoilement de la solution : pointeur vers l'interface

Une idée fausse courante est de passer une valeur de type "id" pour refléter.TypeOf(). Cependant, cela entraîne un reconditionnement implicite de la valeur dans une interface{} avec la primitive de chaîne intégrée.

La clé pour surmonter cet obstacle est d'exploiter un pointeur vers l'interface. En passant un pointeur, le descripteur de type encapsule une interface{}, empêchant le reconditionnement. Par la suite, nous pouvons utiliser Type.Elem() pour récupérer le descripteur de type de l'interface pointée, qui reflétera avec précision la nature de l'interface du type.

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

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

fmt.Println(t.Kind()) // Output: interface
Copier après la connexion

Cette approche révèle efficacement le type de réflexion souhaité.Interface pour les types enraciné dans les primitives.

Informations supplémentaires : pointeur vers les avantages de l'interface

Cette technique non seulement résout le problème initial mais met également en évidence les avantages de l'utilisation de pointeurs vers des interfaces. Dans certains cas, comme la transmission de valeurs à des fonctions qui attendent un type spécifique (par exemple, une chaîne ou une heure), un pointeur vers une interface peut être avantageux pour éviter les conversions implicites.

En suivant ces directives, les développeurs peuvent avec précision récupérer le reflet. Types de types issus des primitifs, permettant une compréhension plus approfondie des capacités de réflexion de Go.

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