Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Funções literal
  2. Declarar uma funções literal

A linguagem Go utiliza conceitos mais modernos. Um deles é o uso de função anônima/literal que nada mais é do que função declarada sem nome atribuídas à uma variável.

As funções literais possuem as mesmas características das funções já vistas. Todas os assuntos relacionadas à funções que foram estudados em Funções são válidos para funções literais.

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
  1. 08/09/2025 - revisão 3 - Ajustes: pontuais, sintaxes, objetivos
  2. 16/09/2024 - revisão 2 - Ajustes gramaticais
  3. 02/10/2023 - revisão 1 - Correção em referências, erros gramaticais e exemplo 2
  4. 21/08/2023 - versão inicial