يمكن إضافة قيم جديدة إلى Nil Slice ولكن إضافة قيم جديدة إلى Nil Map يؤدي إلى حدوث خطأ في وقت التشغيل. دعونا نرى السبب
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
لماذا يعمل الإلحاق بـ Nil Slice:
الشريحة هي إشارة إلى مصفوفة أساسية وبنية بيانات ذات حجم ديناميكي. يتكون من 3 مكونات
عندما نعلن عن شريحة صفرية، سيكون الطول والسعة صفرًا ولا يشير إلى أي مصفوفة أساسية. تقوم عملية الإلحاق بشكل أساسي بالتحقق من السعة وإذا لم تكن كافية، فإنها تقوم بتخصيص صفيف أساسي جديد بسعة كافية لتخزين العناصر الجديدة وإرجاع شريحة جديدة تشير إلى الصفيف الذي تم إنشاؤه حديثًا. لذا فإن الإلحاق يعمل كما هو متوقع.
لماذا لا تعمل الإضافة إلى خريطة Nil:
تعمل الخريطة في golang بشكل أساسي كجدول تجزئة ويجب تهيئة هياكل البيانات الداخلية أولاً قبل أن نتمكن من تخزين زوج القيمة الرئيسية.
عندما نعلن أن الخريطة لا شيء (var m Map[string]int)، فهي غير مهيأة وليست جاهزة بعد لتخزين أزواج القيمة الرئيسية. سيؤدي هذا إلى إنشاء خطأ في وقت التشغيل عندما نحاول إضافة قيم إلى خريطة صفرية. لتجنب مثل هذه الأخطاء، قم بإنشاء خريطة باستخدام make
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
لمعرفة المزيد حول مثل هذه المواضيع بالإضافة إلى أمثلة التعليمات البرمجية، لا تتردد في مراجعة Github repo الخاص بي:
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3