Maison > développement back-end > Golang > Go Reflection peut-il obtenir directement la représentation d'un type à partir de son nom ?

Go Reflection peut-il obtenir directement la représentation d'un type à partir de son nom ?

Patricia Arquette
Libérer: 2024-12-24 17:39:15
original
573 Les gens l'ont consulté

Can Go Reflection Directly Obtain a Type's Representation from its Name?

Obtention directe de la représentation de type à partir du nom dans Go via la réflexion

La question se pose de savoir s'il est possible d'utiliser les bibliothèques de réflexion de Go pour dériver le type représentation d'un type uniquement à partir de son nom. La motivation derrière cette question réside dans une bibliothèque où les utilisateurs doivent fournir des représentations de type à des fins de génération de code.

Au moment de l'exécution

Cette conversion directe n'est pas réalisable au moment de l'exécution à l'aide d'un représentation sous forme de chaîne du nom du type. Les types qui ne sont pas explicitement référencés lors de la compilation peuvent ne pas être présents dans le binaire exécutable, ce qui les rend « inconnus » au moment de l'exécution. Reportez-vous à « Fractionnement du code client/serveur » pour une explication détaillée. Des solutions de contournement peuvent être trouvées dans "Appeler toutes les fonctions avec un préfixe ou un suffixe spécial dans Golang."

Pendant le codage

Cependant, lors de l'écriture ou de la génération du code source, il est possible pour y parvenir sans créer une variable du type donné et appeler Reflect.TypeOf(). En commençant par un pointeur vers le type et en utilisant une valeur de pointeur nulle typée, on peut naviguer du descripteur de type du pointeur au descripteur du type de base en utilisant Type.Elem().

Voici un exemple :

t := reflect.TypeOf((*YourType)(nil)).Elem()
Copier après la connexion

Ce descripteur de Type, représenté par la variable t, sera équivalent au descripteur t2 dérivé de la création d'une variable x du type YourType et de l'application Reflect.TypeOf() :

var x YourType
t2 := reflect.TypeOf(x)

fmt.Println(t, t2)
fmt.Println(t == t2)
Copier après la connexion

Sortie :

main.YourType main.YourType
true
Copier après la connexion

(Essayez-le sur Go Playground)

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