Kann Reflection in Go die Erstellung und Implementierung dynamischer Schnittstellen erleichtern?
Mithilfe von Schnittstellen in Go kann man Schnittstellen im RPC-Stil definieren. Für einen bestimmten Dienst könnte eine Schnittstelle wie die folgende erstellt werden:
type MyService interface { Login(username, password string) (sessionId int, err error) HelloWorld(sessionId int) (hi string, err error) }
Das Ziel besteht darin, Reflexion zu nutzen, um diese Schnittstelle zu realisieren, indem Methodenaufrufe in RPC-Aufrufe umgewandelt, Eingabeparameter gemarshallt und Ergebnisse entmarshallt werden. Während es möglich ist, Reflektion zu verwenden, um eine []Schnittstelle{} von Eingabeparametern für Dienstaufrufe zu erhalten, bleibt die Erstellung eines Werts, der eine Schnittstelle mithilfe reflexionsbasierter Funktionen dynamisch implementiert, schwer zu erreichen.
Einschränkungen und Alternativen Ansätze
Es ist nicht möglich, durch Reflektion einen Typ mit angehängten Methoden zu generieren und anschließend ein Objekt dieses Typs zu instanziieren. Obwohl die Verwendung des unsicheren Pakets theoretisch machbar ist, wäre es ein mühsames Unterfangen.
Stattdessen würde die Bereitstellung zusätzlichen Kontexts zu dem Problem, das Sie angehen möchten, es der Community ermöglichen, alternative Lösungen vorzuschlagen.
Update (23. Juli 2015)
Go 1.5 führte Reflect.FuncOf und ein reflektieren.MakeFunc, die die gewünschte Funktionalität bereitstellen.
Das obige ist der detaillierte Inhalt vonKann Go Reflection Schnittstellen dynamisch erstellen und implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!