Maison  >  Article  >  développement back-end  >  Comment puis-je accéder au type d’une structure Go sans créer d’instance ?

Comment puis-je accéder au type d’une structure Go sans créer d’instance ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-24 20:52:29116parcourir

How Can I Access the Type of a Go Struct Without Creating an Instance?

Accès à Reflect.Type sans création de structure physique

Dans Go, le chargement dynamique de solutions aux problèmes nécessite d'accéder au type de structures sans les créer physiquement . Alors que les solutions existantes imposent la création et la mise à zéro de structures avant l'enregistrement du type, une approche plus efficace existe.

On peut tirer parti de reflect.TypeOf((*Struct)(nil)).Elem() opération. En créant un pointeur nul, l'allocation d'espace est évitée. La méthode Elem récupère le type d'élément à partir de pointeurs, de tableaux, de tranches, de canaux et de cartes.

Par exemple, considérons le SolutionRegistry fourni qui permet le chargement dynamique des solveurs. pour les problèmes du "Projet Euler". Pour enregistrer un type de structure, l'implémentation actuelle nécessite la création et l'initialisation de la structure.

<code class="go">type DummySolution struct {
    data [100 * 1024 * 1024 * 1024]uint8
}</code>

Pour optimiser ce processus, au lieu de créer une instance de DummySolution, on peut utiliser reflect .TypeOf((*DummySolution)(nil)).Elem() pour obtenir son type :

<code class="go">func Register(sol Solution) {
    solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem())
}</code>

Cette technique élimine efficacement le besoin d'instanciation de structure physique lors de l'enregistrement de son type pour un futur chargement dynamique .

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