Reflexion für die dynamische Schnittstelle Implementierung in Go
Reflexion in go ist ein mächtiges Tool, das die Inspektion und Manipulation von Code zur Laufzeit erlaubt. Eine Frage, die aufgeworfen wurde, ist, ob es möglich ist, Reflection zu verwenden, um eine neue Funktion zu erstellen, die eine bestimmte Schnittstelle implementiert. Betrachten Sie zum Beispiel eine Schnittstelle wie:
MyService Interface { Login (Benutzername, Kennwortzeichenfolge) (SessionID int, Erregaler) HelloWorld (SessionID int) (HI String, Erregaler) } Das Ziel ist es, Reflection zu verwenden, um diese Schnittstelle zu implementieren, indem Methodenaufrufe in RPC -Aufrufe, Marshaling -Eingänge und Unmarshaling -Ergebnisse übersetzt werden. Es ist jedoch unzureichend, ein Stück Eingabeparameter als Schnittstellen zu erhalten, um einen Wert zu erstellen, der die Schnittstelle mit Reflexionsfunktionen implementiert. Während das unsichere Paket einige Möglichkeiten bieten könnte, ist es ein mühsamer und ineffizienter Ansatz.
Alternativen
type MyService interface { Login(username, password string) (sessionId int, err error) HelloWorld(sessionId int) (hi string, err error) }
anstatt sich auf die Reflexion zu verlassen, sollten Sie in Betracht ziehen, alternative Lösungen für das zugrunde liegende Problem zu erforschen. Wenn Sie mehr Details zu dem spezifischen Problem bereitstellen, das Sie lösen möchten, können Sie der Community helfen, geeignetere Ansätze vorzuschlagen.
Neue Entwicklung
Es ist erwähnenswert, dass Go -Versionen 1.5 und später reflektierte Reflecf und Reflect.makefunc anbieten. Dies bietet eine praktische und effiziente Lösung für das vorgestellte Problem.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3