Heim >Backend-Entwicklung >Golang >Wie erhalte ich den Reflect.Type einer nicht initialisierten Schnittstelle in Go?

Wie erhalte ich den Reflect.Type einer nicht initialisierten Schnittstelle in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-19 11:09:14275Durchsuche

How Do I Get the reflect.Type of an Uninitialized Interface in Go?

Bestimmen des Reflect.Type einer Schnittstelle

Um festzustellen, ob ein Typ eine Schnittstelle mithilfe des Reflect-Pakets implementiert, ist es erforderlich, Folgendes bereitzustellen ein Reflect.Type für Reflect.Type.Implements(). Allerdings kann es manchmal rätselhaft erscheinen, diesen Typ zu ermitteln, insbesondere bei nicht initialisierten Schnittstellen wie Fehler.

Nicht initialisierte Fehlerschnittstelle

Versuch, den Typ eines nicht initialisierten Fehlers (Schnittstelle) zu ermitteln ) Die Verwendung von „reflect.TypeOf(err).Kind()“ führt zu einer Panik, wenn „Kind()“ aktiviert ist aufgerufen.

Lösung

Um den Typ eines schnittstellenähnlichen Fehlers korrekt zu erhalten, muss zunächst ein Zeiger auf die Schnittstelle erstellt und dann Elem() verwendet werden der resultierende Typ. Dies kann auf zwei Arten erreicht werden:

Ausführliche Methode:

var err error
t := reflect.TypeOf(&err).Elem()

Einzeilige Methode:

t := reflect.TypeOf((*error)(nil)).Elem()

Indem Sie diese Ansätze befolgen, können Sie den Reflect.Type einer Schnittstelle effektiv abrufen, unabhängig von ihrem Initialisierungsstatus.

Das obige ist der detaillierte Inhalt vonWie erhalte ich den Reflect.Type einer nicht initialisierten Schnittstelle in Go?. 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