Go n'a pas la même syntaxe pour les pointeurs de fonction que C et C++. Il y a une très bonne explication pour cela sur le Go blog. Naturellement, les auteurs de Go pensaient que la syntaxe de C pour les pointeurs de fonction était trop similaire à celle des pointeurs réguliers, donc ils ont décidé de rendre les pointeurs de fonction explicites; c'est-à-dire plus lisible.
Voici un exemple que j'ai écrit. Remarquez comment le paramètre fp
est défini dans calculate()
et l'autre exemple ci-dessous vous montre comment vous pouvez faire un pointeur de fonction dans un type et l'utiliser dans une fonction (la fonction commentée commentée).
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
}
Le paramètre fp
est défini comme étant une fonction qui prend deux ints et retourne un seul int. C'est quelque peu la même chose que Mue mentionné mais montre un exemple d'utilisation différent.
Je ne sais pas assez sur Go pour répondre à votre question, mais j'ai counterquestion: pourquoi vous voulez avoir des pointeurs de fonction quand Go a des fonctions de première classe appropriées? –
Je suppose que c'est plus une question d'éducation. J'ai une formation en C et je viens de commencer à apprendre sur Go. J'ai remarqué que Go a des pointeurs similaires à C et voulait donc savoir si les pointeurs de fonction sont possibles dans Go et si oui, comment les déclarer. – Kevin