Por se uma função literal, a sua declaração é feita e atribuído a uma variável.
Tanto uma função literal quanto não literal são do tipo Function.
Sintaxe: Declaração
nome_variavel := func( <lista_parametros> ) ( <lista_retornos> ){
//corpo
return <lista_retorno>;
}
Sintaxe: Uso
nome_variavel( <lista_argumentos> )
nome_variavel2 := nome_variavel( <lista_argumentos> )
Onde
<lista_argumentos>: lista de argumentos separados por (,)
<lista_parametros>: lista de parâmetros separados por (,)
<lista_retorno>: lista de valores/variáveis para retorno
Exemplo 1: Declaração e uso
package main
import "fmt"
func main() {
//declaração
funcao := func() {
fmt.Printf("funcao literal")
}
//uso
funcao()
}
Saída
funcao literal
Exemplo 2: Uso de parâmetro e retorno
package main
import "fmt"
func main() {
funcao := func(param int) {
fmt.Println("funcao literal:",param)
}
funcao(2)
}
Saída
funcao literal: 2
Exemplo 3 : mais de um retorno
package main
import "fmt"
func main() {
funcao := func(valor int) (int, int) {
return valor * 2, valor * 3
}
var valor, valor2 = funcao(10)
fmt.Printf("dobro:%d triplo:%d", valor, valor2)
}
Saída
dobro:20 triplo:30
Exemplo 4: Passagem por valor
package main
import "fmt"
func main() {
funcao := func(valor int) {
valor = valor * 2
}
valor := 10
fmt.Printf("Antes: %d \n", valor)
funcao(valor)
fmt.Printf("Depois: %d", valor)
}
Saída
Antes: 10
Depois: 10
Exemplo 5: Passagem por referência
package main
import "fmt"
func main() {
funcao := func(param *int) {
*param = 2
}
valor := 10
fmt.Printf("Antes: %d \n", valor)
funcao(&valor)
fmt.Printf("Depois: %d", valor)
}
Saída
Antes: 10
Depois: 2
Exemplo 6: mais de um retorno nomeado
package main
import "fmt"
func main() {
funcao := func(valor int) (dobro int, triplo int) {
dobro = valor * 2
triplo = valor * 3
return
}
var valor, valor2 = funcao(10)
fmt.Printf("Val: %d %d", valor, valor2)
}
Saída
dobro:20 triplo:30
Exemplo 7: Usando identificador _
package main
import "fmt"
func main() {
var valor int
funcao := func(param int) (int, int) {
return param * 2, param * 3
}
_, valor = funcao(10)
fmt.Printf("%d \n", valor)
valor, _ = funcao(10)
fmt.Printf("%d", valor)
}
Saída
30
20