为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕尼黑的夜晚无繁华 2021-05-12 15:13:49
我有一个在Go中使用接口定义RPC样式接口的想法。因此,对于给定的服务,我可能会创建一个像这样的接口:type MyService interface{  Login(username, password string) (sessionId int, err error)  HelloWorld(sessionId int) (hi string, err error)}我想做的是使用反射来实现该接口,将方法调用转换为RPC调用,将输入参数编组,然后将结果编组回方法的输出。我知道,如果可以获得输入参数的[] interface {}接口,则可以使用反射进行服务调用。但是,我看不到有任何方法可以使用反射来动态创建一个值,该值将通过调用使用反射的函数来实现接口。有人知道即使使用不安全的方法也可以做到这一点吗?
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您不能通过反射使用附加方法创建类型,以实例化该类型的对象。

通过该unsafe软件包,您可能会遇到很多黑客攻击。但是即使那样,这仍然是一个巨大的痛苦。

如果您详细说明了您要解决的问题,那么社区可以提出其他解决方案。

编辑(2015年7月23日):从Go 1.5开始,还有reflect.FuncOfreflect.MakeFunc,它们可以完全满足您的需求。


查看完整回答
反对 回复 2021-05-17
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我认为,如果可以完全实现该reflect.Type接口,而不能实现(未导出的方法),则有可能实现您想要的目标。然后,也许可以使用实例化您的自定义类型unsafe_New

总而言之,这样做不是一个好主意。

您想要的下一个最佳选择是使用gob之类的东西。您可以将gob用作中间语言,使用反射从界面中读取方法,将其编写为gob,然后将创建的gob代码解码为真实的Go对象。但是我不确定这是否值得。

大多数时候,通过在客户端手动实现接口并转发方法调用,您会更加安全。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信