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

WBOY
Freigeben: 2024-02-09 15:12:09
nach vorne
574 Leute haben es durchsucht

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage