Pular para o conteúdo principal

victorstein.dev

8/100 Dias de Golang - Funções

Table of Contents

# Funções

Já vimos várias funções até agora, len, cap, append e outras. Vamos ver como criar nossas funções.

# Sintaxe da função

A sintaxe de uma função é a seguinte:

func nome_da_funcao(parametro1 tipo, parametro2 tipo) (retorno1 tipo, retorno2 tipo) {
	// Lógica da função
}

A função nome_da_funcao recebe dois parâmetros, parametro1 e parametro2, ambos do tipo tipo. A função retorna dois valores, retorno1 e retorno2, ambos do tipo tipo. Veja esse exemplo mais “real”:

func soma(a int, b int) int {
	return a + b
}

Essa função soma recebe dois parâmetros do tipo int e retorna um valor do tipo int.

# Parâmetros

Os parâmetros são valores que a função recebe, eles são variáveis locais no escopo da função. E são inicializados com os valores passados na chamada da função. Interessante de saber é que o golang não possui valores default, como em outras linguagens como Python. Veja esse código em Python, onde definimos que o valor default de b é 0:

def soma(a, b=0):
	return a + b

Outra questão é que os parâmetros são passados por valor, ou seja, uma cópia do valor é passada para a função. Porém é possível que a função modifique o valor de uma variável passada como parâmetro, mas isso é feito através de ponteiros, que veremos mais adiante.

# Múltiplos retornos

Uma função pode retornar mais de um valor:

func soma_subtrai(a int, b int) (int, int) {
	return a + b, a - b
}

Essa função soma_subtrai recebe dois parâmetros do tipo int e retorna dois valores do tipo int.

# Retorno nomeado

É possível nomear os retornos de uma função:

func soma_subtrai(a int, b int) (soma int, subtrai int) {
	soma = a + b
	subtrai = a - b
	return
}

Essa função soma_subtrai recebe dois parâmetros do tipo int e retorna dois valores do tipo int. Veja que não é necessário colocar os valores de retorno no return, pois já foram nomeados.

# Funções como parâmetros

É possível passar funções como parâmetros para outras funções:

func soma(a int, b int) int {
	return a + b
}

func subtrai(a int, b int) int {
	return a - b
}

func operacao(a int, b int, f func(int, int) int) int {
	return f(a, b)
}

Essa função operacao recebe dois parâmetros do tipo int e uma função do tipo func(int, int) int. Veja que a função operacao chama a função passada como parâmetro.

# Funções anônimas

Em Go, funções anônimas são funções definidas sem um nome explícito. Elas são úteis para situações em que uma função precisa ser utilizada temporariamente ou passada como argumento para outra função. Essas funções podem ser atribuídas a variáveis ou executadas imediatamente.

func main() {
	func() {
		fmt.Println("Função anônima")
	}()
}

Essa função anônima imprime “Função anônima”. Veja que a função é chamada logo após a declaração. Existem outras formas de declarar funções anônimas e outros tipos de funções anônimas, mas isso é assunto para outro post.

# Funções variádicas

Funções variádicas são funções que podem receber um número variável de argumentos

func soma(numeros ...int) int {
	total := 0
	for _, numero := range numeros {
		total += numero
	}
	return total
}

Essa função soma recebe um número variável de argumentos do tipo int. Veja que o parâmetro numeros é uma slice de int. Para chamar essa função, basta passar os valores separados por vírgula:

fmt.Println(soma(1, 2, 3, 4, 5))

# Referências