Go no tiene la misma sintaxis para los punteros de funciones que C y C++. Hay una buena explicación para eso en el Go blog. Es comprensible que los autores de Go pensaran que la sintaxis de C para los indicadores de función era muy similar a los indicadores regulares, por lo que decidieron hacer explícitos los indicadores de función; es decir, más legible
Aquí hay un ejemplo que escribí. Observe cómo se define el parámetro fp
en calculate()
y el otro ejemplo a continuación que muestra cómo puede convertir un puntero de función en un tipo y usarlo en una función (la función de cálculo comentada).
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
}
El parámetro fp
se define como una función que toma dos enteros y devuelve un solo int. Esto es algo similar a Mue mencionado, pero muestra un ejemplo de uso diferente.
No sé lo suficiente sobre Vaya a responder a su pregunta, pero tengo una contrapregunta: ¿por qué ¿Quieres tener punteros de función cuando Go tiene funciones de primera clase? –
Supongo que es más una cuestión educativa. Tengo experiencia en C y recién comencé a aprender sobre Go. Noté que Go tiene punteros similares a C y quería saber si los punteros a función son posibles en Go y, en caso afirmativo, cómo declararlos. – Kevin