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
Patricia Arquetteoriginal
2024-12-24 17:39:15575parcourir

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()

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)

Sortie :

main.YourType main.YourType
true

(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!

Déclaration:
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