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

给定方法值,获取接收者对象

给定方法值,获取接收者对象

Go
慕斯王 2023-08-07 14:46:31
Go 有没有办法从方法值获取接收者对象?例如,是否有任何这样的东西MagicFunc可以使以下程序my info从底层 Foo 实例输出字符串。package mainimport "fmt"type Foo struct {    A string}func (foo *Foo) Bar() string {    return "bar"}func MyFunc(val interface{}) {    i := MagicFunc(val)    f := i.(Foo)    fmt.Println(f.A)}func main() {    f := Foo{A: "my info"}    MyFunc(f.Bar)}
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

不,不可能获取该方法的接收器实例。

如果您使用方法表达式而不是方法值,您最多可以获得接收者的类型,但这不会帮助您获取字符串my info


查看完整回答
反对 回复 2023-08-07
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我想深入研究一下,很快就找到了这个文档:https ://golang.org/s/go11func

正如那里所描述的,whenMyFunc输入val不包含对 f.Bar 的引用,而是对具有签名的特殊函数的引用func() string。该函数知道它可以通过检查众所周知的寄存器来检索原始 f 指针R0(在示例中。在 amd64 上它似乎是dx,但这显然是一个实现细节)。

因此,如果不使用特定于实现的汇编代码就无法做到这一点,这将是非常脆弱的。


查看完整回答
反对 回复 2023-08-07
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

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