为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
森林海 2021-09-13 16:27:38
我正在阅读reflect.MakeFunc并想知道是否还有一种方法可以在运行时创建方法(带有接收器的函数)。
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

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

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

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


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

Go 不像 Java 那样在具体值中嵌入虚拟方法调度表,只在接口值中嵌入。如果你愿意让你的手脏,你可以得到的保持reflect.nonEmptyInterface并修改其itable(ITAB场)。


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信