猿问

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

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


package main


import "fmt"


type x struct {}

func (self *x) hello2(a int) {}


func hello(a int) {}


func main() {

    f1 := hello

    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 is not an expression, must be called

好的,所以也许我必须直接引用原始类型:


  f2 := x.hello2

  fmt.Printf("%+v\n", f2)

不:


> ./junk.go:14: invalid method expression x.hello2 (needs pointer receiver: (*x).hello2)

> ./junk.go:14: x.hello2 undefined (type x has no method hello2)

这类作品:


  i := &x{}

  f2 := reflect.TypeOf(i).Method(0)

  fmt.Printf("%+v\n", f2)

但是,结果f2是reflect.Method,而不是函数指针。:(


这里合适的语法是什么?


RISEBY
浏览 294回答 2
2回答

largeQ

关于 Go 函数调用和闭包的相关阅读:Russ Cox 的“Go 1.1 函数调用”(也详细介绍了 Go1)。https://docs.google.com/document/d/1bMwCey-gmqZVTpRax-ESeVuZGmjwbocYs1iHplK-cjo/pub
随时随地看视频慕课网APP

相关分类

Go
我要回答