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 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
我想深入研究一下,很快就找到了这个文档:https ://golang.org/s/go11func
正如那里所描述的,whenMyFunc
输入val
不包含对 f.Bar 的引用,而是对具有签名的特殊函数的引用func() string
。该函数知道它可以通过检查众所周知的寄存器来检索原始 f 指针R0
(在示例中。在 amd64 上它似乎是dx
,但这显然是一个实现细节)。
因此,如果不使用特定于实现的汇编代码就无法做到这一点,这将是非常脆弱的。
- 2 回答
- 0 关注
- 99 浏览
添加回答
举报
0/150
提交
取消