تتميز Go بأنها تستخدم حلقة واحدة فقط هي for، ولكنها مرنة بدرجة كافية لتغطي جميع حالات الاستخدام التي توفرها لغات أخرى عبر while و do-while و foreach. هذا التبسيط يجعل اللغة أسهل في التعلم.

الصيغة التقليدية لحلقة for

تتكون حلقة for التقليدية من ثلاثة أجزاء مفصولة بفواصل منقوطة: تهيئة المتغير، شرط الاستمرار، وعملية التحديث. تنفذ الحلقة طالما الشرط صحيح.

for i := 0; i < 5; i++ {
    fmt.Println("التكرار رقم:", i)
}

حلقة for كبديل لـ while

إذا احتجت إلى حلقة تنفذ طالما شرط معين متحقق، فاستخدم for مع شرط فقط بدون تهيئة أو تحديث. هذه الصيغة تكافئ while في اللغات الأخرى.

n := 1
for n < 100 {
    n *= 2
}
fmt.Println(n)

الحلقة اللانهائية

لكتابة حلقة لا نهائية، استخدم for بدون أي شرط. تستخدم هذه الصيغة كثيرًا في خوادم الويب وأنظمة المعالجة المستمرة. للخروج منها استخدم العبارة break.

count := 0
for {
    count++
    if count == 10 {
        break
    }
}

المرور على المجموعات باستخدام range

تستخدم range مع for للمرور على عناصر مصفوفة أو slice أو map أو سلسلة نصية. تعيد range قيمتين: الفهرس (أو المفتاح) والقيمة.

fruits := []string{"تفاح", "موز", "برتقال"}
for index, fruit := range fruits {
    fmt.Println(index, fruit)
}

break و continue

تستخدم break للخروج فوريًا من الحلقة، بينما continue تتخطى التكرار الحالي وتنتقل إلى التكرار التالي. كلاهما مفيد للتحكم الدقيق في تدفق الحلقة.

for i := 0; i < 10; i++ {
    if i == 5 {
        break
    }
    if i % 2 == 0 {
        continue
    }
    fmt.Println(i)
}