Avatar ·

كيفية إيقاف goroutine بشكل صحيح في Go؟ مشاكل إنهاء المهام الخلفية

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