Para a utilização de ponteiro para funções em Go, podemos utilizando a inferência de dados com o
operador (:=), por exemplo, para realizar a associação.
Sintaxe
nome_variavel := nome_funcao
Exemplo 8
package main
import (
"fmt"
)
func funcao2(param int) {
fmt.Printf("funcao2: %d", param)
}
func main() {
variavel := funcao2
variavel(10)
}
Saída
funcao2: 10
Podemos também criar um novo tipo para que possamos utilizar o ponteiro de uma função em vetores, structs e outros
Sintaxe: Tipo
type tipo_funcao func(parametros)
Sintaxe: Declaração
var nome_ponteiro_funcao tipo_funcao = nome_funcao_atribuida
Onde
tipo_função: Novo tipo de dado que representa o tipo da função.
parametros: parâmetros utilizados pela função.
A chamada ou invocação da função utilizando um ponteiro é feito da seguinte forma:
Sintaxe
nome_ponteiro(argumentos)
Exemplo 9
package main
import (
"fmt"
)
type tipo_funcao func(param int)
func funcao2(param int) {
fmt.Printf("funcao2: %d", param)
}
func main() {
var pfuncao tipo_funcao = funcao2
pfuncao(10)
}
Saída
funcao2: 10
Nessa abordagem acima, podemos utilizar uma função como argumentos para outras funções, conhecido
também por callback:
Exemplo 9
type meu_tipo_funcao func(param int)
func funcao1 (param int){
fmt.Println("função passada como argumento")
fmt.Println("parâmetro:",param)
}
func funcao2 (funcao_param meu_tipo_funcao, param int){
//seu codigo aqui
funcao_param(param);
}
func main (){
funcao2(funcao1,999) //passando função como parâmetro
}
Saída
função passada como argumento
parâmetro: 999