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 nome_tipo_funcao func(<lista_parametros>)(<lista_retorno>)
Sintaxe: Declaração
var nome_ponteiro nome_tipo_funcao = <nome_funcao_atribuida>
Onde
nome_tipo_funcao: tipo de dado que representa o tipo ponteiro função.
<lista_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(<lista_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:
Sintaxe: Tipo
type nome_tipo_funcao func(<lista_parametros>)(<lista_retorno>)
Sintaxe: Função
func nome_funcao( nome_param nome_tipo_funcao, <lista_parametros> ) (<lista_retorno>)
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