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