El documento 'Go concurrency distilled' ofrece una referencia rápida y didáctica sobre los mecanismos de concurrencia en el lenguaje Go. A diferencia de una guía para principiantes, este recurso se dirige a desarrolladores que buscan repasar conceptos fundamentales mediante ejemplos interactivos y una versión en PDF. El contenido cubre desde las goroutines, que son funciones ligeras gestionadas por el runtime para distribuir carga entre núcleos de CPU, hasta los canales, que permiten el intercambio de valores entre hilos de forma asíncrona.
La explicación detalla el uso de WaitGroups para sincronizar el final de las tareas y la gestión de canales, incluyendo patrones comunes como la generación de datos y el cierre de canales para notificar al lector que la transmisión ha terminado. Se analizan también los canales con búfer, que funcionan como colas FIFO, y la importancia de definir la dirección de los canales para evitar errores de escritura o cierre. Además, el texto aborda el uso del select para gestionar el flujo de datos en pipelines, la detección de carreras de datos (data races) y las condiciones de carrera, así como la implementación de mutexes y semáforos para proteger recursos compartidos. El recurso destaca que Go no requiere bloqueos explícitos para la concurrencia, permitiendo la creación de miles de goroutines sin sobrecarga significativa, y enfatiza la importancia de la limpieza de recursos mediante el recolector de basura.
