Abrufen des Reflect.Type von einem Typ oder seinem Namen in Go
Diese Frage untersucht, ob es möglich ist, den Reflect.Type von a abzurufen benutzerdefinierten Typ, wie etwa „t1“ im gegebenen Beispiel, ohne ihn zu instanziieren oder seinen Namen als String zu verwenden.
Was den ersten Teil der Frage betrifft: Ja, es ist möglich, dies durch die Verwendung einer typisierten Null zu erreichen . Das folgende Code-Snippet demonstriert diesen Ansatz:
var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem()
In diesem Beispiel nutzen wir eine typisierte Null-Zeiger, um den Laufzeittyp von „t1“ zu erhalten.
Was den zweiten Teil betrifft, wird das direkte Abrufen von „reflect.Type“ aus dem Namen eines Typs in Go nicht unterstützt. Die Laufzeit verwaltet keine Zuordnung aller Typen in der aktuellen Binärdatei, was hierfür erforderlich wäre.
Es ist zwar denkbar, ein Typregistrierungspaket zu erstellen und Typen für die Suche nach Zeichenfolgen zu registrieren, dies wäre jedoch unweigerlich der Fall unvollständig sein. Darüber hinaus führen anonyme Typen zu Komplikationen, da ihre Namen möglicherweise nicht eindeutig sind.
Während Go theoretisch eine Funktion zum Abrufen eines Typs basierend auf seinem Namen anbieten könnte, ist es unwahrscheinlich, dass diese Funktion in naher Zukunft implementiert 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