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 Methode Elem 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.
type DummySolution struct {
data [100 * 1024 * 1024 * 1024]uint8
}
Um diesen Prozess zu optimieren, kann man, anstatt eine Instanz von DummySolution zu erstellen, reflect.TypeOf((*DummySolution)(nil)).Elem(), um seinen Typ zu erhalten:
func Register(sol Solution) {
solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem())
}
Diese Technik eliminiert effektiv die Notwendigkeit einer physischen Strukturinstanziierung, während ihr Typ für zukünftiges dynamisches Laden registriert wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3