Go 1.27 يفعّل افتراضيًا أداة كشف الـ goroutines العالقة ويضيف generic methods
تسرب الـ goroutines لا يظهر في أي benchmark، بل في خدمة تثقل بعد أسابيع من التشغيل ويُعاد تشغيلها دوريًا، والآن صار الـ runtime نفسه يشير إليه.
صدر Go 1.27 في 19 أغسطس 2026، وصدر معه في اليوم نفسه go1.26.7 وgo1.25.14. وأكثر ما فيه أثرًا في العمل اليومي أداة تُسمى goroutine leak profile، أصبحت مفعّلة افتراضيًا بعد حذف إعداد GOEXPERIMENT الذي كان يخفيها.
ولفهم المشكلة التي تعالجها: يشغّل المطور goroutine تنتظر إشارة من channel أو mutex أو sync.Cond. ثم يختفي الطرف الذي كان يفترض أن يرسل الإشارة، فلا تصل أبدًا. فتبقى الـ goroutine لا تنتهي ولا تعمل، وتحتفظ بذاكرتها إلى الأبد.
وصعوبة هذا النوع من الأخطاء أن الكود يبدو سليمًا تمامًا، ولا يوجد سطر خاطئ يمكن الإشارة إليه.
والأداة الجديدة تكشف هذا النوع تحديدًا. فهي تبلّغ عن الـ goroutines المتوقفة بشكل دائم، لأن ما تنتظره أصبح غير قابل للوصول، أي أن الـ runtime يعرف أنه لم يعد هناك أي جزء من البرنامج يستطيع إرسال الإشارة.
ويتضمن الإصدار أيضًا:
- generic methods: يمكن للـ method الآن أن تعرّف type parameters خاصة بها، بدل اللجوء إلى دالة على مستوى الـ package
- دخول حزمة uuid وحزمة encoding/json/v2 إلى المكتبة القياسية
- توقيعات ما بعد الحوسبة الكمية من نوع ML-DSA في crypto/mldsa
- تخصيصات الذاكرة الصغيرة، أقل من 80 byte، أصبحت أرخص بنحو 30%
ولن يظهر أثر أداة كشف التسرب في اختبارات الأداء. بل سيظهر في الخدمات التي يزداد استهلاكها للذاكرة مع الوقت دون سبب واضح، والتي تُعاد تشغيلها دوريًا كأن ذلك حل.