Inhaltsverzeichnis
Frageninhalt
Lösung
Heim Backend-Entwicklung Golang Rufen Sie „reflect.Kind' eines Typs ab, der auf einem primitiven Typ basiert

Rufen Sie „reflect.Kind' eines Typs ab, der auf einem primitiven Typ basiert

Feb 09, 2024 pm 03:12 PM
overflow

Rufen Sie „reflect.Kind eines Typs ab, der auf einem primitiven Typ basiert

Bei der PHP-Programmierung ist es eine wichtige Fähigkeit, einen Typ zu erhalten, der auf einem primitiven Typ basiert. Reflect.Kind ist eine Eigenschaft in der von PHP bereitgestellten Reflection-Klassenbibliothek, mit der der Datentyp einer Variablen bestimmt werden kann. Durch die Verwendung von „reflect.Kind“ können wir leicht den Typ der Variablen ermitteln und entsprechende Vorgänge und Verarbeitungen durchführen. Für PHP-Entwickler wird die Beherrschung dieser Fähigkeit dazu beitragen, den Reflexionsmechanismus besser zu verstehen und zu nutzen sowie die Lesbarkeit und Flexibilität des Codes zu verbessern. In diesem Artikel stellt der PHP-Editor Baicao ausführlich vor, wie man Reflect.Kind basierend auf primitiven Typen erhält, und stellt einige praktische Beispiele und Techniken vor, um den Lesern zu helfen, diesen Wissenspunkt besser zu beherrschen.

Frageninhalt

Ich möchte „reflect.kind“ als „reflect.interface“ für einen Typ verwenden, der eine Schnittstelle implementiert, dessen Implementierung jedoch auf einem primitiven Typ basiert: type id string

Eine andere Antwort auf diese Frage könnte sein, wie man den „reflect.type“ eines beliebigen Typs erhält, der „reflect.interfaces“ zurückgibt, wenn kind() aufgerufen wird.

Hier ist das vollständige Beispiel für den mobilen Spielplatz:

type ID interface {
    myid()
}

type id string

func (id) myid() {}

func main() {
    id := ID(id("test"))
    
    fmt.Println(id)
    fmt.Println(reflect.TypeOf(id))
    
    // How to get the kind to return "reflect.Interface" from the var "id"?
    fmt.Println(reflect.TypeOf(id).Kind())
}
Nach dem Login kopieren

Lösung

reflect.typeof() (和 reflect.valueof()) 需要一个 接口{}。基本上,无论您传递给 reflect.typeof() 的值是什么,如果它还不是接口值,它将隐式包装在 interface{} 中。如果传递的值已经是接口值,则其中存储的具体值将作为 interface{} Weitersagen.

Um dieses „Umpacken“ zu vermeiden, das einer der seltenen Fälle ist, in denen ein Zeiger auf eine Schnittstelle sinnvoll ist, können Sie es hier tatsächlich nicht vermeiden. Sie müssen einen Zeiger auf den Schnittstellenwert übergeben.

Wenn Sie also einen Zeiger an eine Schnittstelle übergeben, wird der Zeiger in interface{} 值中。您可以使用 type.elem() eingeschlossen, um den Typdeskriptor des „Point-to-Type“ zu erhalten: d. h. den Elementtyp des Zeigertyps, der der Typdeskriptor des sein wird Welchen Schnittstellentyp Sie suchen.

Beispiel:

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

fmt.println(id)
t := reflect.typeof(&id).elem()
fmt.println(t)

fmt.println(t.kind())
Nach dem Login kopieren

Welche Ergebnisse (versuchen Sie es auf dem go-Spielplatz):

test
main.ID
interface
Nach dem Login kopieren

Verwandte Fragen anzeigen: Was ist der Unterschied zwischen „reflect.valueof()“ und „value.elem()“ in go?

Das obige ist der detaillierte Inhalt vonRufen Sie „reflect.Kind' eines Typs ab, der auf einem primitiven Typ basiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise Jan 15, 2025 pm 08:11 PM

Der Preis von Bitcoin seit seiner Geburt 2009–2025. Die umfassendste Zusammenfassung der historischen BTC-Preise

Was tun, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist_Was zu tun ist, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist Was tun, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist_Was zu tun ist, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist May 06, 2024 pm 01:20 PM

Was tun, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist_Was zu tun ist, wenn die Zeit in der unteren rechten Ecke von Windows 11 abgelaufen ist

Gibt es Community-Foren oder Diskussionsgruppen für Java-Funktionen, in denen ich Fragen stellen und darüber diskutieren kann? Gibt es Community-Foren oder Diskussionsgruppen für Java-Funktionen, in denen ich Fragen stellen und darüber diskutieren kann? Apr 28, 2024 pm 02:12 PM

Gibt es Community-Foren oder Diskussionsgruppen für Java-Funktionen, in denen ich Fragen stellen und darüber diskutieren kann?

So verwenden Sie den Code anderer Leute in Python So verwenden Sie den Code anderer Leute in Python May 05, 2024 pm 07:54 PM

So verwenden Sie den Code anderer Leute in Python

Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein May 03, 2024 pm 09:20 PM

Was soll ich tun, wenn die Uhrzeit auf meinem Win11-Computer immer falsch ist? So stellen Sie die falsche Uhrzeit auf einem Windows 11-Computer ein

Häufige Ausnahmetypen und ihre Reparaturmaßnahmen in der Java-Funktionsentwicklung Häufige Ausnahmetypen und ihre Reparaturmaßnahmen in der Java-Funktionsentwicklung May 03, 2024 pm 02:09 PM

Häufige Ausnahmetypen und ihre Reparaturmaßnahmen in der Java-Funktionsentwicklung

Was bedeutet Überlauf in CSS? Was bedeutet Überlauf in CSS? Apr 28, 2024 pm 03:15 PM

Was bedeutet Überlauf in CSS?

Welche Beziehung besteht zwischen rekursiven Aufrufen und der Ausnahmebehandlung in Java-Funktionen? Welche Beziehung besteht zwischen rekursiven Aufrufen und der Ausnahmebehandlung in Java-Funktionen? May 03, 2024 pm 06:12 PM

Welche Beziehung besteht zwischen rekursiven Aufrufen und der Ausnahmebehandlung in Java-Funktionen?

See all articles