【问题标题】:Is it possible to dynamically create a function with a receiver (method) in go?是否可以在 go 中使用接收器(方法)动态创建函数?
【发布时间】:2021-05-03 15:19:45
【问题描述】:

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

【问题讨论】:

    标签: reflection methods go runtime


    【解决方案1】:

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

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

    不过,从技术上讲,您可以通过分叉反射包来构建一个表示附加到任意类型的方法的值。然而,这不会改变所述类型的方法集,因为它本质上是围绕 Go 的类型系统进行的破解。


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

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

    【讨论】:

    • 有趣...在对象上交换方法指针怎么样? (也许我应该在另一个线程中问) - 是的,我很清楚我不是“应该”做任何这些;)
    猜你喜欢
    • 2023-03-14
    • 2012-06-16
    • 2012-04-26
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多