Maison > développement back-end > Golang > 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
Libérer: 2024-10-24 20:52:29
original
261 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal