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

Is it possible to dynamically create a function with a receiver (method) in go?

我正在阅读有关 reflect.MakeFunc and was wondering if there's also a way to create a Method(带有接收器的函数)在运行时的信息。

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

a way to create a Method (a function with a receiver) at runtime

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


What about swapping method pointers on an object?

去吧,不像e.g. Java 没有在具体值中嵌入虚方法调度 table,only in interface values. If you're willing to get your hands dirty you could get a hold of a reflect.nonEmptyInterface 并修改其 itable(itab 字段)。