reflection - 我可以在 Go 中使用反射创建一个新函数吗?

标签 reflection go

我有个想法,在 Go 中使用接口(interface)来定义 RPC 风格的接口(interface)。所以对于给定的服务,我可能会创建一个这样的接口(interface):

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

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

最佳答案

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

你可以通过 unsafe 包通过大量的黑客攻击来实现这一点。但即便如此,这也是一种巨大的痛苦。

如果您详细说明您要解决的问题,社区可能会提出解决问题的替代方法。

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

关于reflection - 我可以在 Go 中使用反射创建一个新函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397557/

相关文章:

c# - 如何在编译时获得通用参数类型名称?

c# - TargetInvocationException @ PropertyInfo.GetValue(target, null) 与目标类型 MemoryStream

Java:反射调用实现公共(public)接口(interface)的非公共(public)类中的方法

c# - 区分反射中的 OutAttribute 和 out 修饰符

go - Golang扫描函数中 "ERROR: IOError: closed stream"如何处理?

algorithm - 按时间间隔对对象进行高效索引的结构

c++ - 调用Syscall函数时获取异常

go - 模板中数组索引的范围

google-app-engine - datastore.NewQuery() 过滤器规范中的 golang slice 变量?

java - 在 Java 中查找带注释的包?