📄️ Горутины: Основы конкурентности
В большинстве языков программирования (Java, C++, Python) при необходимости выполнять несколько задач одновременно используются потоки операционной системы (OS Threads). В Go есть горутины (goroutines). Это не одно и то же.
📄️ Синхронизация и Data Races
Когда две или более горутины одновременно обращаются к одной и той же переменной, и хотя бы одна из них пытается её изменить, возникает гонка данных (data race). Это состояние — "мины замедленного действия": программа может работать годами, а потом однажды упасть или начать выдавать случайные ошибки.
📄️ Каналы
Для защиты общей памяти используется WaitGroup и Mutex. Но в Go есть более элегантный способ: каналы (chan). Вместо того чтобы «драться» за одну переменную, горутины передают данные друг другу - это делает код чище и избавляет от многих проблем с блокировками.
📄️ Типы каналов
1. Небуферизированные каналы (Unbuffered Channels)