Menu
Coddy logo textTech

Hoja de Trucos de Go

Última actualización

Hola Mundo y estructura del programa

Cada programa Go vive en un paquete; el punto de entrada es func main en el paquete main.

OperaciónSintaxis
Declaración de paquetepackage main
Importar un paqueteimport "fmt"
Importar varios paquetesimport (\n "fmt"\n "os"\n)
Punto de entradafunc main() { ... }
Imprimir una líneafmt.Println("Hello, World!")
Impresión con formatofmt.Printf("%d items\n", n)
Ejecutar un archivogo run main.go
Compilar un binariogo build

Variables y tipos

Go es de tipado estático pero puede inferir tipos con :=.

OperaciónSintaxis
Declarar con tipovar age int = 30
Declarar con inferenciavar name = "Ada"
Declaración cortacount := 0
Varias a la vezx, y := 1, 2
Constanteconst Pi = 3.14
Valores cero0, "", false, nil
Tipos básicosint, float64, string, bool, byte, rune
Conversión de tipof := float64(i)

Control de flujo

Go tiene una sola palabra clave de bucle (for) y sin paréntesis alrededor de las condiciones.

OperaciónSintaxis
If / elseif x > 0 { ... } else { ... }
If con sentencia de inicializaciónif v, ok := m[k]; ok { ... }
Bucle for (estilo C)for i := 0; i < 10; i++ { ... }
Bucle estilo whilefor x < 100 { ... }
Bucle infinitofor { ... }
Range sobre un slicefor i, v := range items { ... }
Switchswitch day { case 1: ...; default: ... }
Switch sin expresiónswitch { case x > 0: ... }
Break / continuebreak, continue

Funciones

Las funciones son valores de primera clase y pueden devolver varios resultados.

OperaciónSintaxis
Función básicafunc add(a int, b int) int { return a + b }
Tipo de parámetro compartidofunc add(a, b int) int { ... }
Varios valores de retornofunc divmod(a, b int) (int, int) { return a / b, a % b }
Valores de retorno con nombrefunc split(sum int) (x, y int) { x = sum / 2; return }
Función variádicafunc sum(nums ...int) int { ... }
Función anónimaf := func() { ... }
Clausurafunc counter() func() int { ... }
Defer (se ejecuta al retornar)defer file.Close()

Slices y arrays

Los arrays tienen un tamaño fijo; los slices son vistas dinámicas sobre arrays.

OperaciónSintaxis
Array de tamaño fijovar a [3]int
Literal de slicenums := []int{1, 2, 3}
Crear un slices := make([]int, 0, 10)
Añadirs = append(s, 4)
Longitud / capacidadlen(s), cap(s)
Cortar un slices[1:3]
Copiarcopy(dst, src)
Iterarfor i, v := range s { ... }

Mapas

Los mapas son las tablas hash integradas de Go.

OperaciónSintaxis
Crear un mapam := make(map[string]int)
Literal de mapam := map[string]int{"a": 1, "b": 2}
Establecer un valorm["c"] = 3
Obtener un valorv := m["a"]
Comprobar existenciav, ok := m["x"]
Eliminar una clavedelete(m, "a")
Longitudlen(m)
Iterarfor k, v := range m { ... }

Structs y métodos

Los structs agrupan campos; los métodos asocian comportamiento mediante un receptor.

OperaciónSintaxis
Definir un structtype Point struct { X, Y int }
Crear una instanciap := Point{X: 1, Y: 2}
Acceder a un campop.X
Puntero a un structp := &Point{1, 2}
Método con receptor por valorfunc (p Point) Dist() float64 { ... }
Método con receptor por punterofunc (p *Point) Move(dx int) { p.X += dx }
Struct embebidotype Circle struct { Point; R int }
Etiquetas de structName string con una etiqueta json:"name" entre comillas invertidas

Interfaces

Las interfaces se satisfacen de forma implícita: cualquier tipo con los métodos correctos califica.

OperaciónSintaxis
Definir una interfaztype Shape interface { Area() float64 }
Implementar (implícito)func (c Circle) Area() float64 { ... }
Interfaz vacía (any)var x interface{} o var x any
Aserción de tipos, ok := x.(string)
Switch de tiposwitch v := x.(type) { case int: ... }
Interfaz Stringerfunc (p Point) String() string { ... }

Goroutines y canales

Las goroutines son hilos ligeros; los canales pasan valores entre ellas.

OperaciónSintaxis
Iniciar una goroutinego doWork()
Crear un canalch := make(chan int)
Canal con búferch := make(chan int, 5)
Enviar a un canalch <- 42
Recibir de un canalv := <-ch
Cerrar un canalclose(ch)
Range sobre un canalfor v := range ch { ... }
Select sobre canalesselect { case v := <-ch: ...; default: ... }
Grupo de esperavar wg sync.WaitGroup; wg.Add(1); wg.Wait()
Mutexvar mu sync.Mutex; mu.Lock(); mu.Unlock()

Manejo de errores

Go devuelve los errores como valores: no hay excepciones.

OperaciónSintaxis
Devolver un errorfunc read() (string, error) { return "", err }
Comprobar un errorif err != nil { return err }
Crear un errorerrors.New("not found")
Error con formatofmt.Errorf("bad id %d", id)
Envolver un errorfmt.Errorf("load: %w", err)
Desenvolver / coincidirerrors.Is(err, os.ErrNotExist)
Coincidir por tipoerrors.As(err, &target)
Panic / recoverdefer func() { recover() }()

La sintaxis de Go que más usas, en una sola página. Esta hoja de trucos de Go es una referencia rápida para el núcleo del lenguaje: variables y tipos, slices y mapas, structs e interfaces, además de las goroutines y los canales que hacen que Golang destaque en la concurrencia.

Todo lo que hay aquí es Go estándar y se compila con la cadena de herramientas oficial. Copia lo que necesites o prueba cada fragmento en vivo en el playground de Go, sin necesidad de instalar nada.

Preguntas frecuentes sobre la hoja de trucos de Go

¿Esta hoja de trucos de Go es gratis?
Sí. Esta hoja de trucos de Go es completamente gratuita, sin necesidad de registrarse. Guárdala en favoritos y vuelve cuando necesites consultar una operación de slice, un patrón de canales o un método de struct.
¿Cuál es la diferencia entre := y var en Go?
var x = 0 declara una variable y funciona en cualquier parte, incluso a nivel de paquete. x := 0 es la declaración corta de variable: declara y asigna a la vez, infiere el tipo y solo se puede usar dentro de una función. Usa var cuando necesites un tipo explícito o una variable a nivel de paquete, y := para declaraciones locales concisas.
¿Qué son las goroutines y los canales?
Una goroutine es un hilo ligero gestionado por el runtime de Go: inicias una escribiendo go someFunc(). Los canales son tuberías tipadas que permiten a las goroutines comunicarse de forma segura: una goroutine envía con ch <- v y otra recibe con <-ch. Juntos son el modelo de concurrencia central de Go, resumido en el dicho "comparte memoria comunicándote".
¿Puedo practicar Go en línea?
Sí. Abre el playground de Go para ejecutar cualquier fragmento de esta hoja de trucos en tu navegador, sin instalar ninguna cadena de herramientas de Go. Cuando quieras estructura, el curso interactivo y gratuito de Go de Coddy te lleva paso a paso desde las variables y los slices hasta las goroutines y los canales.
¿Esta hoja de trucos es buena para principiantes?
Sí. Está organizada desde los temas más comunes (variables, control de flujo, funciones) hasta los avanzados (goroutines, canales, manejo de errores), de modo que puedes usar las secciones de arriba desde el primer día e ir avanzando hacia el resto.
Coddy programming languages illustration

Aprende Go con Coddy

COMENZAR