Avatar ·

تغيير عناصر الشريحة أثناء التكرار في Go: لماذا لا يعمل وكيفية الإصلاح؟

مرحباً بالجميع! لقد بدأت للتو في تعلم Go وواجهت سلوكاً غير مفهوم أثناء التكرار على الشريحة. لدي كود بسيط حيث أريد مضاعفة كل عنصر في شريحة الأعداد الصحيحة: ```go package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} for _, val := range nums { val = val * 2 } fmt.Println(nums) // أتوقع: [2, 4, 6, 8, 10]، لكني أحصل على: [1, 2, 3, 4, 5] } ``` كنت أتوقع أن تتغير القيم في الشريحة بعد الحلقة، لكنها بقيت كما هي. لقد تحققت — المترجم لا يظهر أخطاء، الكود يعمل، لكن النتيجة ليست صحيحة. لماذا يحدث هذا؟ اعتقدت أن `val` هي إشارة (reference) إلى عنصر الشريحة، لكن يبدو أن الأمر ليس كذلك. كيف يمكنني تغيير عناصر الشريحة بشكل صحيح أثناء التكرار؟ هل هناك طرق أخرى غير استخدام الفهرس (index)؟ شكراً مسبقاً على المساعدة! <<>>

المشكلة: نسخ القيمة أثناء التكرار

في Go، عند استخدام بناء الجملة for range، المتغير val هو نسخة من العنصر، وليس إشارة إليه. لذلك، التعديل على val لا يؤثر على العنصر الأصلي في الشريحة.