Heim > Backend-Entwicklung > Golang > Wie erhalte ich das richtige Reflect.Kind eines primitiven Typs bei der Implementierung einer Schnittstelle in Go?

Wie erhalte ich das richtige Reflect.Kind eines primitiven Typs bei der Implementierung einer Schnittstelle in Go?

Patricia Arquette
Freigeben: 2024-12-17 04:58:24
Original
324 Leute haben es durchsucht

How to Get the Correct reflect.Kind of a Primitive Type Implementing an Interface in Go?

Abrufen des Reflect.Kind eines Typs basierend auf einem primitiven Typ

In Go können Sie das Reflect-Paket verwenden, um die Struktur zu überprüfen von Typen und Werten. Allerdings kann es eine Herausforderung sein, den „reflect.Kind“ eines Typs zu bestimmen, der eine Schnittstelle implementiert, aber auf einem primitiven Typ basiert.

Betrachten Sie das folgende Beispiel:

type ID interface {
    myid()
}

type id string

func (id) myid() {}
Nach dem Login kopieren

Hier der ID-Typ implementiert die ID-Schnittstelle, ihre Implementierung basiert jedoch auf dem primitiven Typ string. Wenn Sie versuchen, die Reflect.Kind-ID mithilfe von Reflect.TypeOf(id).Kind() abzurufen, wird Reflect.String anstelle von Reflect.Interface zurückgegeben.

Um dieses Problem zu beheben, müssen Sie bestehen ein Zeiger auf den Schnittstellenwert anstelle des Werts selbst. Der Grund dafür ist, dass Reflect.TypeOf() Schnittstellenwerte erwartet, aber wenn ein Nicht-Schnittstellenwert übergeben wird, wird er implizit in eine Schnittstelle{} eingeschlossen.

Hier ist ein Beispiel:

id := ID(id("test"))

fmt.Println(id)
t := reflect.TypeOf(&id).Elem()
fmt.Println(t)

fmt.Println(t.Kind())
Nach dem Login kopieren

Die Ausgabe ist:

test
main.ID
interface
Nach dem Login kopieren

In diesem Fall gibt Reflect.TypeOf(&id) einen Zeiger auf den Schnittstellenwert zurück, der dann ist „ausgepackt“ mit t := reflektieren.TypeOf(&id).Elem(). Das resultierende t ist der Typdeskriptor der ID-Schnittstelle, und seine Kind()-Methode gibt „reflect.Interface“ zurück.

Dieser Ansatz kann verwendet werden, um den „reflect.Kind“ eines beliebigen Typs abzurufen, der beim Aufruf „reflect.Interfaces“ zurückgibt Kind(), auch wenn es auf einem primitiven Typ basiert.

Das obige ist der detaillierte Inhalt vonWie erhalte ich das richtige Reflect.Kind eines primitiven Typs bei der Implementierung einer Schnittstelle in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage