Goroutines y Channels en Go: Guía con Ejemplos

Pon go delante de una llamada a función y esa función se ejecuta en concurrencia con el resto del programa, gestionada por el runtime de Go en lugar del sistema operativo. Lanzarla es la parte fácil. La difícil es conseguir que dos goroutines se pasen un resultado sin pisarse el estado mutuamente, y de eso se encargan los channels. ¿Qué es una goroutine? Una goroutine es una función que corre de forma independiente de la que la lanzó, gestionada por el runtime de Go y no por el sistema operativo. Un thread del sistema operativo reserva un megabyte o más de stack y le cuesta al kernel tiempo real planificarlo. Una goroutine arranca con un stack de unos 2KB que crece según lo necesita, y el runtime multiplexa muchas goroutines sobre un puñado de threads del sistema operativo. Lanzar miles de ellas es normal. ...

11 de octubre de 2026 · 9 min · 1806 palabras · SpaghettiCoder

Qué Es una Race Condition y Cómo Solucionarla

Dos peticiones llegan al mismo endpoint “retirar 100€” con medio milisegundo de diferencia. La cuenta tiene 150€. Ambas peticiones leen ese saldo, ambas ven fondos suficientes, ambas aprueban, ambas restan 100€. La cuenta acaba en -50€, y ninguna rama del código debería haber permitido eso. Eso es una race condition: el resultado depende de qué operación termina primero, y “primero” nunca fue algo que el código decidiera. ¿Qué causa una race condition? Hacen falta dos ingredientes a la vez: estado mutable compartido, y más de un camino de ejecución que lo toca sin coordinarse. Los caminos pueden ser threads, tareas async, procesos, o dos servidores accediendo a la misma fila de base de datos. Quita cualquiera de los dos ingredientes y el bug desaparece. Un solo thread no puede competir contra sí mismo, y un estado inmutable no puede corromperse por leerse dos veces. ...

9 de octubre de 2026 · 10 min · 1939 palabras · SpaghettiCoder