Heim  >  Artikel  >  Backend-Entwicklung  >  Können Sie einen „reflect.Type' in Go abrufen, ohne den Typ zu instanziieren oder seinen Namen als String zu verwenden?

Können Sie einen „reflect.Type' in Go abrufen, ohne den Typ zu instanziieren oder seinen Namen als String zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 08:45:02829Durchsuche

Can You Retrieve a `reflect.Type` in Go Without Instantiating the Type or Using its Name as a String?

Abrufen von Reflect.Type aus einem Typ oder seinem Namen in Go

Diese Frage untersucht, ob es möglich ist, den Reflect.Type von a abzurufen benutzerdefinierten Typ, wie „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 . Der folgende Codeausschnitt veranschaulicht diesen Ansatz:

var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem()

In diesem Beispiel nutzen wir einen typisierten Nullzeiger, um den Laufzeittyp „t1“ zu erhalten.

Was den zweiten Teil betrifft, das Abrufen Der „reflect.Type“ direkt aus dem Namen eines Typs wird 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.

Obwohl 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.

Das obige ist der detaillierte Inhalt vonKönnen Sie einen „reflect.Type' in Go abrufen, ohne den Typ zu instanziieren oder seinen Namen als String zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn