Golang
205 subscribers
12 photos
14 files
149 links
آموزش زبان برنامه نویسی گولنگ
منابع و مراجع یادگیری
موقعیت‌های شغلی

Admin: @Mahdihp88
Channel Link: https://t.me/golangfa
Download Telegram
🔴قابلیت sync.WaitGroup ویژگی های جدید گولنگ نسخه 1.25

در نسخه 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