Funciones y Métodos
Funciones, métodos y patrones de llamada. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Busca en todas las páginas de la documentación
Funciones, métodos y patrones de llamada. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Patrón común (valor, error).
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 == nilEl retorno desnudo usa resultados nombrados; úsalo con moderación.
func split(s string) (head, tail string) {
head, tail = s[:1], s[1:]
return
}
h, t := split("ab")
h // "a"
// t == "b"Receptores por valor o por puntero.
type Counter struct{ N int }
func (c *Counter) Inc() { c.N++ }
c := Counter{}
c.Inc()
c.N // 1El sufijo ...T recopila los argumentos como un slice.
func sum(xs ...int) int {
n := 0
for _, x := range xs { n += x }
return n
}
sum(1, 2, 3) // 6Las llamadas diferidas se ejecutan en orden LIFO al retornar.
// defer fmt.Println(1)
// defer fmt.Println(2)
// imprime 2 luego 1Las funciones son valores.
add := func(a, b int) int { return a + b }
add(2, 3) // 5Los cierres capturan variables por referencia.
n := 0
inc := func() { n++ }
inc(); inc()
n // 2La función init del paquete se ejecuta antes de main.
// func init() { /* configuración */ }
// sin argumentos, sin retornos; puede haber varias por archivoLos slices pasan la cabecera por valor; el array subyacente se comparte.
func set(s []int) { s[0] = 9 }
x := []int{1}
set(x)
x[0] // 9Funciones de orden superior.
func makeAdder(k int) func(int) int {
return func(n int) int { return n + k }
}
makeAdder(10)(5) // 15import _ "pkg" solo para init.
// import _ "net/http/pprof"
// registra manejadores a través de initType.Method como función.
type T int
func (t T) V() int { return int(t) }
T.V(T(3)) // 3Método enlazado como función.
c := Counter{N: 1}
f := c.Inc
f()
c.N // 2Pasa un slice como variádico con ....
xs := []int{1, 2}
sum(xs...) // 3Recupera solo en funciones diferidas (defer).
func safe() (ok bool) {
defer func() {
if r := recover(); r != nil { ok = false }
}()
panic("x")
}
// safe() recuperaVersiones de la pila: Go 1.26.x · chi/gin/echo latest (verificar en la compilación)
Revisado por Chris St. John·Última actualización: 18 jul 2026