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))