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!