是否可以使用接收器(方法)动态创建一个函数?

时间:2015-02-12 15:28:54

标签: reflection methods go runtime

我正在阅读reflect.MakeFunc,并想知道是否还有一种方法可以在运行时创建Method(带接收器的函数)。

1 个答案:

答案 0 :(得分:2)

不,这是不可能的,因为如果你这样做,接收者的类型method set会在运行时改变。您可能知道,Go在其当前实现中是在编译时进行类型检查。如果类型可能在运行时突然获取(或丢失)方法,则需要对每个接受参数的函数调用进行运行时接口实现检查。

  

在运行时创建方法(带接收器的函数)的方法

但从技术上讲,可以通过分支反射包来构建一个表示附加到任意类型的方法的值。但是,这不会改变所述类型的方法集,因为它本质上是围绕Go类型系统的黑客攻击。


  

如何在对象上交换方法指针?

去,不像,例如Java没有在具体值only in interface values中嵌入虚方法调度表。如果您愿意亲自动手,可以抓住reflect.nonEmptyInterface并修改其 itable (itab字段)。