Zugriff auf Reflect.Type ohne physische Strukturerstellung
In Go erfordert das dynamische Laden von Problemlösungen den Zugriff auf die Art von Strukturen, ohne diese physisch zu erstellen . Während bestehende Lösungen die Erstellung und Nullung von Strukturen vor der Typregistrierung vorschreiben, gibt es einen effizienteren Ansatz.
Man kann reflect.TypeOf((*Struct)(nil)).Elem() nutzen Betrieb. Durch die Erstellung eines Nullzeigers wird die Speicherplatzzuweisung vermieden. Die Elem-Methode ruft den Elementtyp aus Zeigern, Arrays, Slices, Kanälen und Karten ab.
Bedenken Sie beispielsweise die bereitgestellte SolutionRegistry, die das dynamische Laden von Lösern ermöglicht für „Projekt Euler“-Probleme. Um einen Strukturtyp zu registrieren, erfordert die aktuelle Implementierung die Erstellung und Initialisierung einer Struktur.
<code class="go">type DummySolution struct { data [100 * 1024 * 1024 * 1024]uint8 }</code>
Um diesen Prozess zu optimieren, kann man, anstatt eine Instanz von DummySolution zu erstellen, reflect verwenden .TypeOf((*DummySolution)(nil)).Elem() um seinen Typ zu erhalten:
<code class="go">func Register(sol Solution) { solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem()) }</code>
Diese Technik eliminiert effektiv die Notwendigkeit einer physischen Strukturinstanziierung, während der Typ für zukünftiges dynamisches Laden registriert wird .
Das obige ist der detaillierte Inhalt vonWie kann ich auf den Typ einer Go-Struktur zugreifen, ohne eine Instanz zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!