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: |

Matt Hussey, editorial director of NEAR Protocol (and former editor-in-chief of Decrypt) responded to the news of the Telegram group with “#meIRL.” Matt Hussey, editorial director at NEAR Protocol also responded to this news with “#meIRL”. Just as you search “Bear Market Screaming” in Telegram, you will see a Pepe frog yelling as the group’s featured image. Joined by Telegram's representative in Brazil, Alan Campos, Perekopsky noted the platform was unable to cater to some of the TSE requests due to the company's operational setup. But Perekopsky added that these requests could be studied for future implementation. Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you: To view your bio, click the Menu icon and select “View channel info.”
from us


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