Go Funções Básico
Funções e múltiplos retornos
Em Go, funções são blocos de código reutilizáveis que podem receber parâmetros e retornar valores. Diferente de muitas linguagens, Go permite que uma função retorne múltiplos valores, o que é muito útil para retornar um resultado e um erro, por exemplo.
Além disso, Go suporta retornos nomeados, onde os valores de retorno podem ser declarados com nomes e usados como variáveis dentro da função. Isso pode tornar o código mais claro e permitir um return sem argumentos.
Outro recurso poderoso são as funções variádicas, que aceitam um número variável de argumentos do mesmo tipo. Por fim, funções são valores de primeira classe em Go: podem ser atribuídas a variáveis, passadas como argumentos e retornadas por outras funções.
Pontos-chave
- Funções podem retornar múltiplos valores, separados por vírgula na assinatura e no
return. - Retornos nomeados são declarados na assinatura e podem ser usados como variáveis locais.
- Funções variádicas recebem
...Te os argumentos chegam como um slice[]T. - Funções são valores: podem ser atribuídas a variáveis e passadas como parâmetros.
- O
returnsem argumentos só é permitido em funções com retornos nomeados.
package main
import (
"fmt"
"strings"
)
// Função com múltiplos retornos: divide e retorna quociente e resto.
func dividir(a, b int) (int, int) {
return a / b, a % b
}
// Retornos nomeados: já declara as variáveis de retorno.
func dividirNomeado(a, b int) (quociente, resto int) {
quociente = a / b
resto = a % b
return // retorno sem argumentos
}
// Função variádica: recebe zero ou mais strings.
func juntar(separador string, partes ...string) string {
return strings.Join(partes, separador)
}
// Função que recebe outra função como parâmetro.
func aplicar(f func(int) int, valor int) int {
return f(valor)
}
func main() {
q, r := dividir(10, 3)
fmt.Println("dividir:", q, r)
q2, r2 := dividirNomeado(10, 3)
fmt.Println("dividirNomeado:", q2, r2)
s := juntar("-", "a", "b", "c")
fmt.Println("juntar:", s)
dobro := func(x int) int { return x * 2 }
fmt.Println("aplicar dobro:", aplicar(dobro, 5))
}