Лок удерживается на всё время цикла — 1000 итераций. Другие горутины заблокированы. Если doWork не нуждается в локе — лок слишком широкий. Если нужна защита отдельной операции: for i := 0; i < 1000; i++ { mu.Lock(); doWork(i); mu.Unlock() }. Держать лок минимально необходимое время. Defer удобен, но иногда вреден для производительности.
Что не так: mu.Lock(); defer mu.Unlock(); for i := 0; i < 1000; i++ { doWork(i) }?
Middle
114 просмотровAFK Offer AI
Какие Kafka клиенты для Go существуют?