Go non ha la stessa sintassi per i puntatori di funzione come C e C++. C'è una buona spiegazione per quello su Go blog. Comprensibilmente gli autori di Go hanno pensato alla sintassi di C per i puntatori di funzioni troppo simili ai puntatori regolari, quindi in breve hanno deciso di rendere espliciti i puntatori di funzione; cioè più leggibile.
Ecco un esempio che ho scritto. Si noti come il parametro fp
sia definito in calculate()
e l'altro esempio riportato di seguito che mostra come è possibile creare un puntatore a funzione in un tipo e utilizzarlo in una funzione (la funzione di calcolo commentata).
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
}
Il parametro fp
è definito come una funzione che prende due int e restituisce un singolo int. Questo è in qualche modo la stessa cosa menzionata Mue ma mostra un diverso esempio di utilizzo.
io non ne so abbastanza su Go per rispondere alla tua domanda, ma ho un counterquestion: perché sarebbe vuoi avere dei puntatori di funzione quando Go ha le funzioni corrette di prima classe? –
Suppongo che sia più una questione educativa. Ho uno sfondo in C e ho appena iniziato a conoscere Go. Ho notato che Go ha dei puntatori simili a C e quindi desideravo sapere se i puntatori di funzione sono possibili in Go e se sì, come dichiararli. – Kevin