Avatar ·

هل break في Go يقطع فقط switch/select أم أيضًا الحلقة الخارجية؟

مرحبًا بالجميع! بدأت تعلم Go مؤخرًا وواجهت سلوكًا غير متوقع لعامل `break`. لدي حلقة `for` بداخلها `switch`. توقعت أن `break` داخل `case` سيقطع الحلقة، لكن هذا لم يحدث. إليك مثال مبسط لرمزى: ```go package main import "fmt" func main() { for i := 0; i < 5; i++ { switch i { case 2: fmt.Println("وجدنا 2، نخرج من الحلقة!") break // ظننت أن هذا سيقطع for default: fmt.Printf("التكرار %d\n", i) } } fmt.Println("انتهت الحلقة") } ``` توقعت أنه بعد طباعة "وجدنا 2، نخرج من الحلقة!" ستنهي البرنامج الحلقة وتطبع "انتهت الحلقة". لكن عمليًا يستمر البرنامج في التكرارات: 0، 1، "وجدنا 2"، 3، 4 ثم فقط "انتهت الحلقة". قرأت أنه في Go، `break` بشكل افتراضي يقطع فقط البنية الأعمق `switch` أو `select` أو `for`. لكن في فهمي، إذا كان `break` موجو