So erhalten Sie die Reflect.Interface-Art für einen Typ basierend auf einem primitiven Typ
In Go, wenn Sie mit Typen arbeiten, die Schnittstellen implementieren Wenn Sie sich bei der Implementierung jedoch auf primitive Typen verlassen, ist es notwendig, den Reflect.Kind als Reflect.Interface zu erhalten. Dieser Artikel befasst sich mit diesem Bedarf und bietet eine Lösung.
Das Problem
Stellen Sie sich die folgende Situation vor:
type ID interface { myid() } type id string func (id) myid() {}
Hier ist ID eine Schnittstelle implementiert durch id, die ein String ist. Wenn wir „reflect.TypeOf(id)“ verwenden, um den Typdeskriptor zu erhalten, ist das Ergebnis nicht das gewünschte „reflect.Interface“, sondern ein „reflect.String“.
Die Lösung
Um dieses Problem zu umgehen, ist es notwendig, einen Zeiger auf den Schnittstellenwert anstelle des Werts selbst an Reflect.TypeOf() zu übergeben. Dies verhindert das implizite Umschließen des Werts in einer Schnittstelle{}.
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: "interface"
In diesem Beispiel gibt Reflect.TypeOf(&id) einen Zeiger auf den Schnittstellenwert zurück, der dann mit Elem() entpackt wird Erhalten Sie den Typdeskriptor der Schnittstelle selbst. Dieser Ansatz stellt die gewünschte Reflect.Interface-Art bereit.
Zusätzlicher Hinweis
Die gleiche Technik kann verwendet werden, um jede Art von Reflect.Type zu erhalten, die Reflect.Interface zurückgibt, wenn Aufruf von Kind(). Übergeben Sie einfach einen Zeiger auf den Wert oder Typ, der reflektiert werden soll.TypeOf().
Das obige ist der detaillierte Inhalt vonWie erhalte ich eine Reflect.Interface-Art für einen Go-Typ basierend auf einem primitiven Typ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!