🔴قابلیت sync.WaitGroup ویژگی های جدید گولنگ نسخه 1.25
در نسخه Go 1.25**، یک متد جدید به `sync.WaitGroup` اضافه شده به نام
🧠 چرا
در نسخههای قبلی برای اجرای goroutine همراه با شمارنده
روش قدیمی:
اگر
---
✅ روش جدید:
در Go 1.25، این الگو ساده شده:
همزمان
✨ مثال کامل
خروجی ممکن:
📌 مزایای
| مزیت | توضیح |
| -------------------------------------- | ---------------------------- |
| ✅ کد تمیزتر | نیازی به
| 🧠 جلوگیری از خطاهای رایج | مثل فراموشی
| 🧵 مناسب برای patternهای goroutine سبک | موازیسازی سریع و امن |
---
⚠️ نکته مهم
*
* برای استفاده از آن، باید مطمئن باشید که پروژهتان با Go 1.25 یا بالاتر کامپایل میشود.
* این متد دقیقاً مثل
https://t.me/gopher_academy
#learn
در نسخه Go 1.25**، یک متد جدید به `sync.WaitGroup` اضافه شده به نام
Go()
** که هدفش سادهسازی اجرای goroutineها همراه با شمارندهی WaitGroup است.🧠 چرا
WaitGroup.Go()
اضافه شده؟در نسخههای قبلی برای اجرای goroutine همراه با شمارنده
WaitGroup`، باید دستی `Add()
و Done()
را بنویسید:روش قدیمی:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
doWork()
}()
اگر
Add
یا Done
را فراموش میکردی یا ترتیبش اشتباه بود، ممکن بود برنامه بنبست (deadlock) بشه یا goroutineها نشمارده بشن.---
✅ روش جدید:
wg.Go(fn)
در Go 1.25، این الگو ساده شده:
var wg sync.WaitGroup
wg.Go(func() {
doWork()
})
همزمان
Add(1)
انجام میشه و داخل goroutine بهطور خودکار Done()
صدا زده میشه—دیگه لازم نیست دستی چیزی بنویسی.✨ مثال کامل
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
i := i // capture variable
wg.Go(func() {
fmt.Println("working on task", i)
})
}
wg.Wait()
fmt.Println("All tasks done.")
}
خروجی ممکن:
working on task 0
working on task 1
working on task 2
All tasks done.
📌 مزایای
Go()
| مزیت | توضیح |
| -------------------------------------- | ---------------------------- |
| ✅ کد تمیزتر | نیازی به
Add
و Done
نیست || 🧠 جلوگیری از خطاهای رایج | مثل فراموشی
Done()
|| 🧵 مناسب برای patternهای goroutine سبک | موازیسازی سریع و امن |
---
⚠️ نکته مهم
*
Go()
فقط از Go 1.25 در دسترس است.* برای استفاده از آن، باید مطمئن باشید که پروژهتان با Go 1.25 یا بالاتر کامپایل میشود.
* این متد دقیقاً مثل
go func(){...}()
عمل میکند، فقط با مدیریت داخلی Add
و Done
.https://t.me/gopher_academy
#learn
Telegram
Gopher Academy
🕸 Gopher Academy
🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
حمایت مالی:
https://www.coffeete.ir/mrbardia72
ادمین:
@mrbardia72
🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
حمایت مالی:
https://www.coffeete.ir/mrbardia72
ادمین:
@mrbardia72