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!