一尘不染

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

go

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

type MyService interface{
  Login(username, password string) (sessionId int, err error)
  HelloWorld(sessionId int) (hi string, err error)
}

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


阅读 235

收藏
2020-07-02

共1个答案

一尘不染

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

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

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

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

2020-07-02