Der folgende Code erhält einen Zeiger auf die Funktion hello
und druckt es:Wie erhalten Sie einen Funktionszeiger auf eine typisierte Funktion in go?
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)
}
Wenn ich jedoch den Abschnitt am unteren Rand un-Kommentar, die Fehler kompilieren, zu sagen: So
> ./junk.go:14: undefined: hello2
ich habe versucht:
i := &x{}
f2 := &i.hello2
fmt.Printf("%+v\n", f2)
... aber, dass Fehler mit:
Ok, vielleicht habe ich direkt zu den ursprünglichen Typ verweisen:
f2 := x.hello2
fmt.Printf("%+v\n", f2)
Nope:
> ./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)
Diese Art der Arbeiten:
i := &x{}
f2 := reflect.TypeOf(i).Method(0)
fmt.Printf("%+v\n", f2)
jedoch die resultierende f2
ist ein reflect.Method
, kein Funktionszeiger. :(
Was ist die angemessene Syntax hier?
Dies ist eine ausgezeichnete Antwort! –