Reflection 是否可以在go中使用接收器(方法)动态创建函数?

Reflection 是否可以在go中使用接收器(方法)动态创建函数?,reflection,methods,go,runtime,Reflection,Methods,Go,Runtime,我正在阅读并想知道是否还有一种方法可以在运行时创建(带有接收器的函数)。不,这是不可能的,因为如果这样做,接收器的类型会在运行时发生变化。您可能知道,Go在其当前实现中是在编译时进行类型检查的。如果类型在运行时可能突然获取(或丢失)方法,则需要对每个接受接口参数的函数调用进行运行时接口实现检查 在运行时创建方法(带接收器的函数)的一种方法 但是,从技术上讲,您可以通过分叉reflect包来构建表示附加到任意类型的方法的值。然而,这不会改变said类型的方法集,因为它本质上是围着Go的类型系统进行

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

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

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

但是,从技术上讲,您可以通过分叉reflect包来构建表示附加到任意类型的方法的值。然而,这不会改变said类型的方法集,因为它本质上是围着Go的类型系统进行的黑客攻击


交换对象上的方法指针怎么样


Go与Java不同,例如Java没有在具体值中嵌入虚拟方法调度表。如果你想弄脏你的手,你可以抓住a并修改它的itable(itab字段)。

有趣。。。交换对象上的方法指针怎么样?(也许我应该在另一个帖子中问这个问题)-是的,我很清楚我不“应该”做这些;)