"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا تعدل حلقة RANK GO MANE عناصر الصفيف؟

لماذا لا تعدل حلقة RANK GO MANE عناصر الصفيف؟

نشرت في 2025-02-04
تصفح:463

Why Does My Go Range Loop Not Modify Array Elements?

. يمكن أن يؤدي ذلك إلى سلوك غير متوقع ، كما هو موضح في رمز GO التالي: استيراد "FMT" اكتب MyType struct { سلسلة الميدان } Func Main () { var Array [10] mytype لـ _ ، e: = مجموعة مجموعة { e.field = "foo" } لـ _ ، e: = مجموعة مجموعة { fmt.println (E.field) fmt.println ("-") } }

في هذا المثال ، القصد هو تعديل خاصية "الحقل" لكل عنصر في الصفيف. ومع ذلك ، نظرًا لأن عبارة النطاق تُرجع نسخة من القيمة ، يتم إجراء التغييرات على نسخة محلية ولا تؤثر على الصفيف الأصلي. نتيجة لذلك ، يُظهر الإخراج جميع خصائص "الحقل" على أنها ذات القيمة الافتراضية.

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for _, e := range array {
        e.field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}

func main () { var Array [10] mytype لـ IDX ، _: = مجموعة مجموعة { صفيف [idx] .field = "foo" } لـ _ ، e: = مجموعة مجموعة { fmt.println (E.field) fmt.println ("-") } }

باستخدام الفهرس بدلاً من القيمة في الحلقة ، فإنك تضمن أن التغييرات التي تم إجراؤها على خاصية "الحقل" تنعكس في المصفوفة الأصلية.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3