登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-09 07:18:49 442浏览 收藏

今天golang学习网给大家带来了《是否可以在 go 中使用接收器(方法)动态创建函数?》,其中涉及到的知识点包括golang等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

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

正确答案

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

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

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


交换对象上的方法指针怎么样?

Go 与 Java 不同,它不会在具体值中嵌入虚拟方法调度表,而只是在接口值中嵌入。如果您愿意亲自动手,您可以获取 a[reflect.nonEmptyInterface](https://github.com/golang/go/blob/release- branch.go1.4/src/reflect/value.go#L174)并修改它的 itable (itab 字段)。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表