sync.Mutex - эксклюзивная блокировка; Lock/Unlock. RWMutex - несколько читателей или один писатель; RLock/RUnlock, Lock/Unlock. sync.WaitGroup - ожидание завершения горутин: Add(n), Done() (равно Add(-1)), Wait(). sync.Once - однократное выполнение. Не копировать мьютексы; разблокировать в defer для избежания паники при ошибке.
var mu sync.RWMutex
mu.RLock()
defer mu.RUnlock()
var wg sync.WaitGroup
wg.Add(1)
go func() { defer wg.Done(); ... }()
wg.Wait()