Avatar ·

كيفية الاستماع إلى N قناة في Go: select ديناميكي لعدد عشوائي من القنوات؟

مرحباً بالجميع! أنا أدرس Go وواجهت مشكلة. أكتب أداة تقوم بمعالجة الأحداث من عدة مصادر بيانات. كل مصدر يعمل في goroutine خاص به ويرسل البيانات إلى قناته الخاصة. عدد المصادر غير معروف مسبقاً ويمكن أن يتغير أثناء تشغيل البرنامج (يمكن للمستخدم إضافة/إزالة المصادر).\n\nفي Go يوجد بناء `select` الذي يسمح بالاستماع إلى عدة قنوات في وقت واحد. لكنه ثابت - يجب تحديد جميع `case`-ات مسبقاً:\n\n```go\nselect {\ncase msg1 := <-ch1:\n // معالجة\ncase msg2 := <-ch2:\n // معالجة\ncase msg3 := <-ch3:\n // معالجة\n}\n```\n\nلكن ماذا أفعل إذا كان لدي slice من القنوات `[]chan int` وعددها يمكن أن يكون 5 أو 10 أو 100؟ كيف أكتب `select` ديناميكي يعمل مع عدد عشوائي من القنوات؟