我可以在Go中使用反射功能来创建新功能吗?

我有一个在Go中使用接口定义RPC样式接口的想法。因此,对于给定的服务,我可能会创建一个像这样的接口:


type MyService interface{

  Login(username, password string) (sessionId int, err error)

  HelloWorld(sessionId int) (hi string, err error)

}

我想做的是使用反射来实现该接口,将方法调用转换为RPC调用,将输入参数编组,然后将结果编组回方法的输出。我知道,如果可以获得输入参数的[] interface {}接口,则可以使用反射进行服务调用。但是,我看不到有任何方法可以使用反射来动态创建一个值,该值将通过调用使用反射的函数来实现接口。有人知道即使使用不安全的方法也可以做到这一点吗?


慕尼黑的夜晚无繁华
浏览 199回答 3
3回答

千巷猫影

您不能通过反射使用附加方法创建类型,以实例化该类型的对象。通过该unsafe软件包,您可能会遇到很多黑客攻击。但是即使那样,这仍然是一个巨大的痛苦。如果您详细说明了您要解决的问题,那么社区可以提出其他解决方案。编辑(2015年7月23日):从Go 1.5开始,还有reflect.FuncOf和reflect.MakeFunc,它们可以完全满足您的需求。

猛跑小猪

我认为,如果可以完全实现该reflect.Type接口,而不能实现(未导出的方法),则有可能实现您想要的目标。然后,也许可以使用实例化您的自定义类型unsafe_New。总而言之,这样做不是一个好主意。您想要的下一个最佳选择是使用gob之类的东西。您可以将gob用作中间语言,使用反射从界面中读取方法,将其编写为gob,然后将创建的gob代码解码为真实的Go对象。但是我不确定这是否值得。大多数时候,通过在客户端手动实现接口并转发方法调用,您会更加安全。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go