如何在go中获得指向类型化函数的函数指针?

如何在go中获得指向类型化函数的函数指针?,go,function-pointers,member-function-pointers,Go,Function Pointers,Member Function Pointers,下面的代码获取指向函数hello的指针并打印它: 主程序包 输入“fmt” 类型x结构{} func(self*x)hello2(a int){} func hello(a int){} func main(){ 你好 fmt.Printf(“%+v\n”,f1) //f2:=hello2 //fmt.Printf(“%+v\n”,f2) } 但是,如果我取消对底部部分的注释,编译错误将显示为: ./junk.go:14:undefined:hello2 所以我试着: i:=&x{} f2:

下面的代码获取指向函数
hello
的指针并打印它:

主程序包
输入“fmt”
类型x结构{}
func(self*x)hello2(a int){}
func hello(a int){}
func main(){
你好
fmt.Printf(“%+v\n”,f1)
//f2:=hello2
//fmt.Printf(“%+v\n”,f2)
}
但是,如果我取消对底部部分的注释,编译错误将显示为:

./junk.go:14:undefined:hello2
所以我试着:

i:=&x{}
f2:=&i.hello2
fmt.Printf(“%+v\n”,f2)
…但这是一个错误:

./junk.go:15:method i.hello2不是表达式,必须调用
好吧,也许我必须直接参考原始类型:

f2:=x.hello2
fmt.Printf(“%+v\n”,f2)
没有:

./junk.go:14:无效的方法表达式x.hello2(需要指针接收器:(*x.hello2)
>./junk.go:14:x.hello2未定义(类型x没有方法hello2)
这类作品:

i:=&x{}
f2:=反射类型(i).方法(0)
fmt.Printf(“%+v\n”,f2)
但是,生成的
f2
是一个
反射方法,而不是函数指针:(


这里的适当语法是什么?

您可以使用方法表达式,它将返回一个以接收方作为第一个参数的函数

f2:=(*x).hello2
fmt.Printf(“%+v\n”,f2)
f2(&x{},123)
否则,您可以将函数调用包装在一个接受
x
作为参数的函数中

f2:=func(val*x){
val.hello2(123)
}
或者关闭现有的
x

val:=&x{}
f2:=func(){
val.hello2(123)
}

有关Go函数调用和闭包的相关阅读:Russ Cox的“Go 1.1函数调用”(也详细介绍了Go1)