Что выведет: var wg sync.WaitGroup; for i := 0; i < 3; i++ { wg.Add(1); go func() { defer wg.Done(); fmt.Println(i) }() }; wg.Wait()?

Middle
142 просмотров
AFK Offer AI

Скорее всего 3, 3, 3 (до Go 1.22). Та же проблема что с горутинами в цикле — closure захватывает i по ссылке. wg.Wait() гарантирует что все горутины завершились, но не фиксит проблему с переменной. Фикс: go func(n int) { defer wg.Done(); fmt.Println(n) }(i). Или с Go 1.22 переменная цикла уже per-iteration.

Следующий вопрос

Что такое circuit breaker state machine?