"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > Go Basics: لماذا لا تقبل الشرائح الصفرية القيم الجديدة، بينما لا تقبل الخرائط الصفرية القيم الجديدة

Go Basics: لماذا لا تقبل الشرائح الصفرية القيم الجديدة، بينما لا تقبل الخرائط الصفرية القيم الجديدة

تم النشر بتاريخ 2024-11-01
تصفح:158

يمكن إضافة قيم جديدة إلى 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]

  • هل يدعم تطبيق Go Pass By Ref؟
  • الجديد مقابل الصنع في Go
  • هل يدعم Go الميراث؟
  • كيفية إنشاء خادم ويب بسيط في Go؟

لمعرفة المزيد حول مثل هذه المواضيع بالإضافة إلى أمثلة التعليمات البرمجية، لا تتردد في مراجعة Github repo الخاص بي:

Go Basics: Why nil Slices accept new values, but nil Maps don ساي7xp / تعلم جولانج

أساسيات GoLang إلى المتقدمة. بما في ذلك أنماط التصميم والمبادئ الصلبة والمزيد

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/sai7xp/go-basics-why-nil-slices-accept-new-values-but-nil-maps-dont-23l0?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ Study_golang@163 .comdelete
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3