我有一个想法,在Go中使用接口来定义RPC样式接口.所以对于给定的服务,我可能会创建一个这样的接口:
type MyService interface{
Login(username, password string) (sessionId int, err error)
HelloWorld(sessionId int) (hi string, err error)
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用反射来实现该接口,将方法调用转换为RPC调用,对输入参数进行封送,并将结果解组回到方法的输出中.我知道如果我能得到输入参数的[]接口{},我可以使用反射来进行服务调用.但是,我没有看到任何方法使用反射动态创建一个值,通过调用我的反射使用函数来实现接口.有没有人知道这样做的方法,即使使用不安全?
thw*_*hwd 10
您无法通过反射创建具有附加方法的类型,以实例化该类型的对象.
你可以通过unsafe
包装中的很多hackery实现这一点.但即便如此,这也是一次巨大的痛苦.
如果你详细阐述了你想要解决的问题,社区可以提出解决问题的替代方法.
编辑(2015年23月):开始进入1.5有reflect.FuncOf
和reflect.MakeFunc
,它做的正是你想要的.
似乎反射包将获得在Go 1.1中创建新的任意类型函数的能力:reflect.MakeFunc.
(以下为响应@nemo而添加)
可以创建结构类型而不是接口:
type MyService struct{
Login func(username, password string) (sessionId int, err error)
HelloWorld func(sessionId int) (hi string, err error)
}
autorpc.ImplementService(&MyService, MyServiceURL)
session, err := MyService.Login(username, password)
stringout, err := MyService.HelloWorld(session)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2284 次 |
最近记录: |