select в Go ждёт сразу несколько каналов и выполняет тот case, который первым получил данные. Разбираю механику, паттерн таймаута через time.After и типичные ловушки при написании сканеров.
Горутины похожи на Promise и async/await, но работают иначе — по-настоящему параллельно. Разбираю ключевые отличия, WaitGroup, типичную ловушку с захватом переменной цикла.
Канал — встроенный примитив Go для передачи данных между горутинами. Разбираю буферизованные и небуферизованные каналы, worker pool и главное правило: кто пишет — тот и закрывает.
context.Context — стандартный способ ограничить время выполнения и отменить сетевые вызовы в Go. Разбираю WithTimeout, WithCancel, defer cancel() и типичные ошибки при работе с контекстом.
В Go несколько горутин могут читать и писать одни данные одновременно. Разбираю sync.Mutex, sync.RWMutex, sync.Once, детектор гонок и почему defer mu.Unlock() критичен.