تم إطلاق Go 1.22: نظرة عامة على التغييرات الرئيسية في الإصدار الجديد

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تم إطلاق Go 1.22: ما الذي تغير في اللغة



قدم فريق مطوري Go الإصدار المنتظر 1.22. يجلب هذا التحديث سلسلة من التغييرات الهامة التي تهدف إلى تحسين الأداء والأمان وسهولة التطوير. دعنا نستعرض أهم المستجدات.



المستجدات الرئيسية في الإصدار 1.22



1. حلقات for-range محسّنة

أحد أكثر التغييرات المنتظرة هو إعادة صياغة سلوك المتغيرات في حلقات for-range. سابقًا، كان المتغير المُعلن في رأس الحلقة يُنشأ مرة واحدة ويُعاد استخدامه في كل تكرار. كان هذا يؤدي إلى أخطاء يصعب اكتشافها، خاصة عند التقاط المتغير في closures (على سبيل المثال، عند تمريره إلى goroutines).

بدءًا من Go 1.22، كل تكرار لحلقة for-range ينشئ متغيرًا جديدًا خاصًا به. هذا يجعل الكود أكثر قابلية للتنبؤ وأكثر أمانًا.

  • السلوك القديم: متغير واحد للحلقة بأكملها، أخطاء متكررة مع المؤشرات و goroutines.
  • السلوك الجديد: كل تكرار يحصل على نسخته الخاصة من المتغير، مما يزيل الأخطاء الشائعة.

يؤثر هذا التغيير على الحلقات عبر الشرائح slices، الخرائط maps، القنوات channels، وكذلك حلقات for التقليدية ثلاثية المكونات.



2. دعم النطاق الصحيح integer range في for-range

يقدم Go 1.22 إمكانية التكرار مباشرة عبر نطاق صحيح. يمكنك الآن الكتابة ببساطة for i := range 10 بدلاً من الإنشاءات المعقدة مع for i:=0; i < 10; i++.

هذا التبسيط النحوي يجعل الكود أنظف ويقلل من احتمالية أخطاء "off-by-one".

// كان:for i := 0; i < 5; i++ { ... }

// أصبح:for i := range 5 { ... }


3. تنفيذ جديد للحزمة math/rand/v2

تلقت الحزمة math/rand إصدارًا ثانيًا — math/rand/v2. هذا ليس مجرد تحديث، بل إعادة صياغة كاملة مع التركيز على السرعة وجودة توليد الأرقام العشوائية.

  • الأداء: أصبح توليد الأرقام أسرع بشكل ملحوظ (في بعض المعايير benchmarks يصل إلى 2-3 مرات).
  • الخوارزميات: تُستخدم خوارزميات حديثة وأكثر موثوقية (مثل ChaCha8 للمولد الافتراضي).
  • سهولة الاستخدام: واجهة API الجديدة تبسط العمل مع المولدات، وتمت إزالة عدد من الوظائف القديمة.

الحزمة القديمة math/rand لا تزال متاحة للتوافق مع الإصدارات السابقة، ولكن للمشاريع الجديدة يُوصى باستخدام math/rand/v2.



تحسينات هامة أخرى

  • توجيه محسّن في net/http: تدعم الحزمة net/http الآن طريقة جديدة لتسجيل المعالجات handlers باستخدام أنماط patterns تقترب من أسلوب الأطر القياسية. يمكن للمطورين تحديد مسارات routes أكثر مرونة، بما في ذلك الاستبدالات substitutions وطرق HTTP.
  • تحسين جمع القمامة garbage collection: أصبح جامع القمامة أكثر كفاءة، مما أدى إلى تقليل زمن الانتظار latency وتقليل استهلاك الذروة للذاكرة في بعض السيناريوهات.
  • تحديث المكتبة القياسية: تم إجراء تغييرات صغيرة ولكنها مفيدة في العمل مع الشرائح slices، الخرائط maps، والسلاسل النصية strings، مما يحسن الأداء والاستقرار.
  • تحسينات في الأدوات tooling

المكتبات الموصى بها