GOLANG_INTERVIEW Telegram 1306
🚀 Ошибки с sync.WaitGroup в Go и что нового в Go 1.25

В статье “Avoiding Common sync.WaitGroup Mistakes in Go” Джон Калхаун разбирает, как Go 1.25 помогает избежать частых ошибок при использовании sync.WaitGroup.

### 🔹 Ошибка: wg.Add внутри горутины
Часто встречающийся неправильный код:


for i := 0; i < 5; i++ {
go func() {
wg.Add(1)
defer wg.Done()
// работа…
}()
}
wg.Wait()


Проблема: wg.Add(1) вызывается уже внутри горутины. Она может не успеть выполниться до wg.Wait(), из-за чего программа зависает или ведёт себя некорректно.

В Go 1.25 go vet теперь предупреждает:
“WaitGroup.Add called from inside new goroutine”

Правильный вариант:

for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// работа…
}()
}
wg.Wait()


🔹 Новый метод wg.Go()

Go 1.25 добавил удобный метод Go, который сам вызывает Add и Done:


for i := 0; i < 5; i++ {
wg.Go(func() {
// работа…
})
}
wg.Wait()


Этот код эквивалентен такому:


wg.Add(1)
go func() {
defer wg.Done()
f()
}()


Итог

- go vet теперь ловит ошибки, когда wg.Add вызывается внутри горутины.

- Новый метод wg.Go(...) упрощает код и снижает риск ошибок.

Подробнее: https://www.calhoun.io/avoiding-common-sync-waitgroup-mistakes/
31👍9👏6🎉3🥰1



tgoop.com/golang_interview/1306
Create:
Last Update:

🚀 Ошибки с sync.WaitGroup в Go и что нового в Go 1.25

В статье “Avoiding Common sync.WaitGroup Mistakes in Go” Джон Калхаун разбирает, как Go 1.25 помогает избежать частых ошибок при использовании sync.WaitGroup.

### 🔹 Ошибка: wg.Add внутри горутины
Часто встречающийся неправильный код:


for i := 0; i < 5; i++ {
go func() {
wg.Add(1)
defer wg.Done()
// работа…
}()
}
wg.Wait()


Проблема: wg.Add(1) вызывается уже внутри горутины. Она может не успеть выполниться до wg.Wait(), из-за чего программа зависает или ведёт себя некорректно.

В Go 1.25 go vet теперь предупреждает:
“WaitGroup.Add called from inside new goroutine”

Правильный вариант:

for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// работа…
}()
}
wg.Wait()


🔹 Новый метод wg.Go()

Go 1.25 добавил удобный метод Go, который сам вызывает Add и Done:


for i := 0; i < 5; i++ {
wg.Go(func() {
// работа…
})
}
wg.Wait()


Этот код эквивалентен такому:


wg.Add(1)
go func() {
defer wg.Done()
f()
}()


Итог

- go vet теперь ловит ошибки, когда wg.Add вызывается внутри горутины.

- Новый метод wg.Go(...) упрощает код и снижает риск ошибок.

Подробнее: https://www.calhoun.io/avoiding-common-sync-waitgroup-mistakes/

BY Golang вопросы собеседований







Share with your friend now:
tgoop.com/golang_interview/1306

View MORE
Open in Telegram


Telegram News

Date: |

Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel. The main design elements of your Telegram channel include a name, bio (brief description), and avatar. Your bio should be: In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013. How to build a private or public channel on Telegram? To view your bio, click the Menu icon and select “View channel info.”
from us


Telegram Golang вопросы собеседований
FROM American