Go hat nicht die gleiche Syntax für Funktionszeiger wie C und C++. Dafür gibt es eine ziemlich gute Erklärung auf der Go blog. Verständlicherweise dachten die Go-Autoren, dass die C-Syntax für Funktionszeiger zu normalen Zeigern zu ähnlich ist. Kurz gesagt, entschieden sie sich dafür, Funktionszeiger explizit zu machen; d.h. besser lesbar.
Hier ist ein Beispiel, das ich schrieb. Beachten Sie, wie der fp
Parameter in calculate()
definiert ist und das andere Beispiel unten zeigt, wie Sie einen Funktionszeiger zu einem Typ machen und in einer Funktion verwenden können (die kommentierte Berechnungsfunktion).
package main
import "fmt"
type ArithOp func(int, int)int
func main() {
calculate(Plus)
calculate(Minus)
calculate(Multiply)
}
func calculate(fp func(int, int)int) {
ans := fp(3,2)
fmt.Printf("\n%v\n", ans)
}
// This is the same function but uses the type/fp defined above
//
// func calculate (fp ArithOp) {
// ans := fp(3,2)
// fmt.Printf("\n%v\n", ans)
// }
func Plus(a, b int) int {
return a + b
}
func Minus(a, b int) int {
return a - b
}
func Multiply(a,b int) int {
return a * b
}
fp
Der Parameter wird definiert als eine Funktion, die zwei ints nimmt und gibt einen einzelnen Int. Dies ist etwas das gleiche, Mue erwähnt, aber zeigt ein anderes Anwendungsbeispiel.
ich über Go nicht genug weiß um Ihre Frage zu beantworten, aber ich habe eine Gegenfrage: Warum sollte Sie möchten Funktionszeiger haben, wenn Go über erstklassige Funktionen verfügt? –
Ich denke, es ist eher eine pädagogische Frage. Ich habe einen Hintergrund in C und habe gerade angefangen, etwas über Go zu lernen. Ich habe bemerkt, dass Go Zeiger ähnlich wie C hat und wollte daher wissen, ob Funktionszeiger in Go möglich sind und, wenn ja, wie man sie deklariert. – Kevin