كيفية إيقاف goroutine بشكل صحيح في Go؟ مشاكل إنهاء المهام الخلفية
مرحباً بالجميع! أنا مطور Go مبتدئ، وقد واجهت مشكلة في إدارة goroutines. أقوم بكتابة خدمة صغيرة تتحقق بشكل دوري من حالة API خارجي وتحديث cache المحلي. لهذا، أقوم بتشغيل goroutine خلفي مع حلقة لا نهائية و time.Sleep.
المشكلة هي أنه عند إنهاء البرنامج (مثلاً باستخدام Ctrl+C) أو عند الحاجة إلى إعادة تشغيل goroutine، لا أستطيع إيقافها بشكل صحيح. إذا قمت بإنهاء main ببساطة، فإن goroutine تظل معلقة أو تتعطل. جربت استخدام متغير عام `var running bool` والتحقق منه في الحلقة، لكن هذا لا يعمل فورياً، وأحياناً يتم حظر goroutine في عمليات الإدخال/الإخراج.
إليك مثال على الكود الخاص بي:
```go
package main
import (
"fmt"
"time"
)
func worker() {
for {
fmt.Print