Какие примитивы синхронизации из пакета sync в Go вы используете и зачем
Что проверяют
Пользуетесь ли вы синхронизацией осознанно и понимаете ли, когда канал уместнее замка. Вопрос открытый, поэтому по перечислению сразу видно глубину: назвали три штуки из учебника или рассказали, где какая пригодилась. Следом обычно спрашивают, как вы ловите гонки.
Как отвечать
Пройдитесь по пакету и к каждому примитиву дайте применение:
sync.Mutex: эксклюзивный доступ. Не рекурсивный, повторныйLockв той же горутине это дедлок. С Go 1.18 естьTryLock, нужен редко;sync.RWMutex: много читателей или один писатель. Выигрывает только на долгих чтениях, на коротких секциях обычныйMutexбыстрее из-за учёта читателей;sync.WaitGroup: ожидание группы горутин,Addстрого до запуска,defer wg.Done()внутри. В Go 1.25 появился методwg.Go(func(){ ... }), который делает и то и другое сам;sync.Once: ленивая инициализация. С Go 1.21 естьOnceFunc,OnceValue,OnceValues;sync.Pool: переиспользование буферов в горячем пути. Содержимое вычищается сборщиком, поэтому годится только для по-настоящему временных объектов;sync.Map: узкая специализация под стабильный набор ключей и разделённые между горутинами ключи. В обычном случаеmapподRWMutexпонятнее;sync.Cond: ожидание условия,Waitвсегда внутри циклаfor !условие. Почти всегда заменяется каналом;sync/atomic: типыatomic.Int64иatomic.Pointer[T]из Go 1.19 вместо старых функций, для счётчиков и флагов без замка;golang.org/x/sync/errgroup: группа с первой ошибкой и отменой контекста,SetLimitограничивает параллелизм.
Хорошо добавить правило выбора: канал передаёт владение данными, замок защищает разделяемое состояние на месте. И про запрет копирования: структуры sync нельзя копировать после первого использования, go vet это ловит.
Где спотыкаются
Снимают замок без defer, а потом добавляют ранний return и получают вечно занятый мьютекс.
Вызывают wg.Add(1) внутри самой горутины. Wait успевает проскочить раньше, и программа завершается, не дождавшись работы.
Говорят «гонок нет, тесты зелёные». Без go test -race в CI гонка живёт годами и стреляет на проде под нагрузкой.