Maison  >  Article  >  développement back-end  >  Pouvez-vous récupérer un « reflect.Type » dans Go sans instancier le type ni utiliser son nom comme chaîne ?

Pouvez-vous récupérer un « reflect.Type » dans Go sans instancier le type ni utiliser son nom comme chaîne ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 08:45:02831parcourir

Can You Retrieve a `reflect.Type` in Go Without Instantiating the Type or Using its Name as a String?

Récupération de Reflect.Type à partir d'un type ou de son nom dans Go

Cette question explore s'il est possible d'obtenir le reflet.Type d'un type personnalisé, tel que "t1" dans l'exemple donné, sans l'instancier ni utiliser son nom comme chaîne.

Concernant le premier une partie de la question, oui, il est possible d'y parvenir en utilisant un nil tapé. L'extrait de code suivant illustre cette approche :

var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem()

Dans cet exemple, nous exploitons un pointeur nul typé pour obtenir le type d'exécution de "t1".

Quant à la deuxième partie, récupérer le reflet.Type directement à partir du nom d’un type n’est pas pris en charge dans Go. Le moteur d'exécution ne maintient pas une carte de tous les types dans le binaire actuel, ce qui serait nécessaire pour y parvenir.

Bien qu'il soit concevable de créer un package de registre de types et d'enregistrer les types pour une recherche par chaîne, cela entraînerait inévitablement être incomplet. De plus, les types anonymes introduisent des complications car leurs noms peuvent ne pas être uniques.

Bien que Go puisse théoriquement offrir une fonction permettant de récupérer un type en fonction de son nom, il est peu probable que cette fonctionnalité soit implémentée dans un avenir proche.

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