Un primer programa en Go necesita una herramienta de línea de comandos, un archivo go.mod y un paquete main. Qué hacen go run, go build, gofmt y go vet, y por qué Go no compila código con un import sin usar.
Toda variable de Go empieza con un valor cero, los números nunca se convierten solos y las constantes son más flexibles que las variables. Aprende var, :=, enteros con tamaño, overflow, iota y los verbos de Printf para ver valores.
Go se arregla con if, una sola palabra clave de bucle llamada for y un switch que no cae al siguiente caso. Aprende cada forma, el cambio de Go 1.22 que da a cada iteración su propia variable, y el break con etiqueta.
Las funciones de Go pueden devolver varios valores, llevar variables consigo como closures y programar la limpieza con defer. Mira cómo funciona cada cosa, incluido el orden de las llamadas diferidas y cuándo se fijan sus argumentos.
Un slice de Go es una pequeña ventana sobre un array que guarda los valores reales. Cuando ves la ventana, len, cap, append y el bug de dos slices que se cambian entre sí dejan de ser un misterio.
Un map de Go guarda valores bajo claves y los encuentra con un hash. Aprende por qué una clave que falta da el valor cero, por qué escribir en un map nil provoca un panic y por qué el orden de iteración cambia en cada ejecución.
Un string de Go es una fila de bytes de solo lectura, casi siempre UTF-8. Cuando lo ves así, que len cuente bytes, que indexar dé un byte, que range dé runes y que un slice parta un carácter en dos, todo tiene sentido.
Los structs de Go son valores, así que cada asignación y cada llamada los copia. Los punteros te dejan compartir un solo struct, y los receptores puntero son la forma en que un método cambia el valor sobre el que se llama.
Una interfaz de Go es una lista de métodos, y cualquier tipo que tenga esos métodos la satisface sin decirlo. Aprende conjuntos de métodos, Stringer, io.Reader, type switches y por qué un error que guarda un puntero nil no es nil.
En Go los errores son valores comunes que devuelves y revisas. Aprende a envolverlos con contexto, a encontrar la causa con errors.Is y errors.As, a juntar varios a la vez, y a guardar panic y recover para los bugs de verdad.
Un módulo de Go es un árbol de paquetes bajo un solo archivo go.mod. Aprende cómo funcionan las rutas de import, los nombres exportados y las carpetas internal, y luego prueba el código con tablas de pruebas, subtests, ejemplos y benchmarks.
Los genéricos de Go permiten que una función sirva para muchos tipos, con restricciones que dicen qué tipos se aceptan. Los iteradores permiten que una función entregue valores de uno en uno a un bucle for, y se detenga en cuanto el bucle hace break.
Go decide por ti si un valor vive en el stack o en el heap. Mira cómo el escape analysis toma esa decisión, cómo verla con go build -gcflags=-m, cómo contar asignaciones y qué hace después el recolector de basura.
Una goroutine es una función que corre junto al resto de tu programa, y Go puede ejecutar miles a la vez. Aprende a iniciarlas, esperarlas, evitar que se fuguen y cómo el scheduler reparte unos pocos hilos entre ellas.
Un canal de Go pasa valores entre goroutines y hace que se esperen entre sí. Aprende canales sin buffer y con buffer, el cierre, los deadlocks, los canales nil y cómo select espera en varios a la vez.
Dos goroutines que cambian la misma variable sin coordinarse producen una carrera de datos y pierden cambios en silencio. Aprende cómo sync.Mutex, RWMutex, atomic y Once la evitan, y cómo go run -race la encuentra.
Un contexto de Go le avisa a cada goroutine de un trabajo cuándo parar. Aprende cancelación, timeouts y valores por petición, y después arma un worker pool, un pipeline, fan-out, un errgroup y un semáforo que nunca dejan fugas.
La biblioteca estándar de Go trae un servidor HTTP listo para producción. Aprende handlers, enrutamiento con patrones de método y ruta en ServeMux, las reglas de ResponseWriter, qué pasa con cada petición y por qué http.Server necesita timeouts.
Una API REST de lista de tareas en Go sin paquetes de terceros. Construye el store, las rutas, la decodificación segura de JSON, la validación, los códigos de estado, el middleware y los logs con slog, capa por capa.
Prueba una API REST en Go con httptest, un store falso, verificaciones sobre los logs, el detector de carreras y fuzzing. Después despliégala con timeouts en el servidor, un apagado ordenado y un solo binario estático.