"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-15
Parcourir:952

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 exploiter le 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érez 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.

type DummySolution struct {
    data [100 * 1024 * 1024 * 1024]uint8
}

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 :

func Register(sol Solution) {
    solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem())
}

Cette technique élimine efficacement le besoin d'instanciation de structure physique tout en enregistrant son type pour un chargement dynamique futur.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3