Maison  >  Article  >  développement back-end  >  Comment accéder au « reflect.Type » d'une structure en Go sans instanciation ?

Comment accéder au « reflect.Type » d'une structure en Go sans instanciation ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 09:51:28925parcourir

How to Access the `reflect.Type` of a Struct in Go without Instantiation?

Obtention du type Struct sans instanciation

Dans un projet visant à charger dynamiquement des solutions aux problèmes du projet Euler, obtention de l'instance Reflect.Type d'un struct sans le créer physiquement pose un défi. La solution actuelle nécessite une instanciation manuelle et une remise à zéro des structures, comme l'illustre la structure de registre dans l'extrait de code Go fourni.

Une façon de surmonter cette limitation consiste à tirer parti de l'idiome du pointeur nul. En créant un pointeur nul vers la structure souhaitée, nous pouvons obtenir son instance Reflect.Type sans allouer de mémoire pour l'ensemble de sa structure. La méthode Elem du package Reflect nous permet alors d'accéder au type d'élément, qui dans ce cas correspond au type de structure réel.

Par exemple, considérons la modification suivante de l'extrait de code :

<code class="go">import "reflect"

...

func main() {
    // Get the type of DummySolution without instantiation
    dummySolutionType := reflect.TypeOf((*DummySolution)(nil)).Elem()
    fmt.Println("DummySolution type:", dummySolutionType)
}</code>

Dans ce code modifié, nous créons un pointeur nil vers DummySolution puis utilisons reflect.TypeOf pour obtenir son instance reflect.Type. Par la suite, nous utilisons Elem pour obtenir le type d’élément, qui est le type réel de la structure DummySolution. En utilisant cette technique, nous pouvons accéder au type struct sans réellement en créer une instance, résolvant ainsi le défi d'origine.

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