كيف تنتظر انتهاء جميع الـ Goroutines في Go دون استخدام time.Sleep؟
مرحباً بالجميع! بدأت تعلم Go وواجهت مشكلة في مزامنة الـ Goroutines. أكتب برنامجاً بسيطاً يقوم بتشغيل عدة Goroutines لمعالجة البيانات بالتوازي، لكنني لا أستطيع جعل الدالة الرئيسية تنتظر انتهاءها.
هذا هو الكود الخاص بي:
```go
package main
import (
"fmt"
"time"
)
func worker(id int) {
fmt.Printf("Worker %d started\n", id)
time.Sleep(2 * time.Second) // محاكاة العمل
fmt.Printf("Worker %d finished\n", id)
}
func main() {
for i := 1; i <= 5; i++ {
go worker(i)
}
// البرنامج ينتهي فوراً دون انتظار الـ Goroutines
fmt.Println("Main function ended")
}
```
المشكلة هي أن البرنامج ينتهي فوراً دون انتظار تنفيذ الـ Goroutines. أعلم أنه يمكن استخدام `time.Sleep()`، لكن هذا حل مؤقت — لا أعرف الوقت الدقيق لتنفيذ كل Goroutine. علاوة على ذلك، هذا غير موثوق وغير فعال.
كيف يمكن مزامنة الـ Goroutines بشكل صحيح في Go؟ أحتاج حلاً موثوقاً دون ترميز زمن الانتظار بشكل ثابت. سأكون ممتناً.