我正在阅读reflect.MakeFunc并想知道是否还有一种方法可以在运行时创建方法(带有接收器的函数)。
1 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
不,这是不可能的,因为如果您这样做,接收器的类型方法集将在运行时更改。您可能知道,Go 在其当前实现中是在编译时进行类型检查的。如果类型在运行时突然获取(或丢失)方法,您将需要对每个接受接口参数的函数调用进行运行时接口实现检查。
一种在运行时创建方法(带有接收器的函数)的方法
但是,从技术上讲,您可以通过分叉反射包来构建一个表示附加到任意类型的方法的值。然而,这不会改变所述类型的方法集,因为它本质上是对 Go 类型系统的一种黑客攻击。
如何交换对象上的方法指针?
Go 不像 Java 那样在具体值中嵌入虚拟方法调度表,只在接口值中嵌入。如果你愿意让你的手脏,你可以得到的保持reflect.nonEmptyInterface
并修改其itable(ITAB场)。
- 1 回答
- 0 关注
- 180 浏览
添加回答
举报
0/150
提交
取消