تخطَّ إلى المحتوى

make

تخصيص الشرائح والخرائط والقنوات make

make دالة مدمجة تخصّص وتهيّئ شريحة أو خريطة أو قناة جاهزة للاستخدام مباشرة — بعكس new التي تعيد مؤشّرًا لقيمة صفرية فقط.

make تعمل فقط مع ثلاثة أنواع: slice و map و chan. بعكس new، لا تعيد مؤشّرًا بل قيمة من نفس نوع الوسيطة، مهيّأة وجاهزة للاستخدام الفوري بدل أن تكون فارغة تمامًا. مع الشرائح تحدّد الوسيطة الثانية الطول (length)، وتقبل وسيطة ثالثة اختيارية للسعة (capacity) إن أردت مساحة إضافية محجوزة مسبقًا لتفادي إعادة التخصيص المتكرر مع append. مع الخرائط تحدّد الوسيطة تلميحًا لعدد العناصر المتوقّع (اختياري). مع القنوات تحدّد سعة المخزن المؤقّت — صفر أو بلا وسيطة يعني قناة غير مخزَّنة.

الصياغة

make([]Type, length, capacity)   // capacity اختياري
make(map[KeyType]ValType, sizeHint)   // sizeHint اختياري
make(chan Type, bufferSize)   // bufferSize اختياري

📄 مثال

s := make([]int, 0, 10)   // طول 0، سعة 10 — استعداد لـ append بلا إعادة تخصيص مبكرة
s = append(s, 1, 2, 3)

m := make(map[string]int)   // خريطة فارغة جاهزة للاستخدام مباشرة
m["العمر"] = 25

ch := make(chan int, 5)   // قناة مخزَّنة بسعة 5
ch <- 1

أهم النقاط

العنصرالوظيفة
make([]T, n)شريحة بطول n وسعة تساوي الطول افتراضيًا
make([]T, n, c)شريحة بطول n وسعة c منفصلة — تقلّل إعادة التخصيص لاحقًا
make(map[K]V)خريطة فارغة جاهزة للإضافة مباشرة، بعكس var m map[K]V التي تكون nil
make(chan T, n)قناة بمخزن مؤقّت سعته n؛ بلا n تكون قناة غير مخزَّنة

💡 نصائح عملية

  • استخدم var m map[K]V فقط لو لن تكتب للخريطة قبل تهيئتها لاحقًا — للكتابة الفورية استخدم make
  • حدّد السعة بـ make للشرائح لما تعرف الحجم التقريبي مسبقًا — يقلّل عمليات إعادة التخصيص الداخلية مع append

⚠️ أخطاء شائعة

  • الكتابة لخريطة أُنشئت بـ var m map[K]V بدون make تسبّب panic فورية لأن قيمتها nil
  • الخلط بين make وnew — new تعيد مؤشّرًا لقيمة صفرية لأي نوع، وmake تخصّص فقط الأنواع الثلاثة وتعيد قيمة جاهزة لا مؤشّرًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GO الكامل بالعربي.