Funções e Métodos
Funções, métodos e padrões de chamada. Os resultados aparecem na mesma seção de código: comentários // na mesma linha quando curtos, blocos // de múltiplas linhas abaixo da amostra quando não.
Busque em todas as páginas da documentação
Funções, métodos e padrões de chamada. Os resultados aparecem na mesma seção de código: comentários // na mesma linha quando curtos, blocos // de múltiplas linhas abaixo da amostra quando não.
Padrão comum (valor, erro).
func div(a, b int) (int, error) {
if b == 0 { return 0, errors.New("div0") }
return a / b, nil
}
q, err := div(10, 2)
q // 5
// err == nilRetorno nu (naked return) usa resultados nomeados - use com moderação.
func split(s string) (head, tail string) {
head, tail = s[:1], s[1:]
return
}
h, t := split("ab")
h // "a"
// t == "b"Receptores de valor ou ponteiro.
type Counter struct{ N int }
func (c *Counter) Inc() { c.N++ }
c := Counter{}
c.Inc()
c.N // 1...T no final coleta argumentos como um slice.
func sum(xs ...int) int {
n := 0
for _, x := range xs { n += x }
return n
}
sum(1, 2, 3) // 6Chamadas deferidas executam em LIFO ao retornar.
// defer fmt.Println(1)
// defer fmt.Println(2)
// imprime 2 depois 1Funções são valores.
add := func(a, b int) int { return a + b }
add(2, 3) // 5Closures capturam variáveis por referência.
n := 0
inc := func() { n++ }
inc(); inc()
n // 2A função init do pacote executa antes de main.
// func init() { /* setup */ }
// sem argumentos, sem retornos; pode haver múltiplas por arquivoSlices passam o cabeçalho por valor; o array subjacente é compartilhado.
func set(s []int) { s[0] = 9 }
x := []int{1}
set(x)
x[0] // 9Funções de ordem superior.
func makeAdder(k int) func(int) int {
return func(n int) int { return n + k }
}
makeAdder(10)(5) // 15import _ "pkg" apenas para init.
// import _ "net/http/pprof"
// registra handlers via initType.Method como função.
type T int
func (t T) V() int { return int(t) }
T.V(T(3)) // 3Método vinculado como função.
c := Counter{N: 1}
f := c.Inc
f()
c.N // 2Passa slice como variádico com ....
xs := []int{1, 2}
sum(xs...) // 3Recupera apenas em funções deferidas.
func safe() (ok bool) {
defer func() {
if r := recover(); r != nil { ok = false }
}()
panic("x")
}
// safe() recuperaVersões da Stack: Go 1.26.x · chi/gin/echo latest (verificar na compilação)
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026