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