„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich auf den Typ einer Go-Struktur zugreifen, ohne eine Instanz zu erstellen?

Wie kann ich auf den Typ einer Go-Struktur zugreifen, ohne eine Instanz zu erstellen?

Veröffentlicht am 15.11.2024
Durchsuche:630

How Can I Access the Type of a Go Struct Without Creating an Instance?

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.

Neuestes Tutorial Mehr>

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