"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ما الفرق بين وظيفة \"new()\" ومشغل عنوان الذاكرة \"&\" في Go؟

ما الفرق بين وظيفة \"new()\" ومشغل عنوان الذاكرة \"&\" في Go؟

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

What\'s the Difference Between the \

الاختلافات بين عامل التشغيل new () وعامل التشغيل "&"

في Go، الوظيفة الجديدة () وعنوان الذاكرة "&" يتم استخدام كلا المشغلين لتخصيص الذاكرة. ومع ذلك، هناك بعض الاختلافات الدقيقة بين استخدامها.

مقارنة الوظائف

يقوم كل من المشغلين new() و&& بإرجاع مؤشر إلى عنوان الذاكرة المخصص حديثًا. ومع ذلك، فهي تختلف في تركيبها:

  • v := &Vector{} يستخدم عامل التشغيل "&" للحصول على عنوان بنية Vector فارغة.
  • v := new( Vector) الدالة new() لإنشاء مؤشر إلى بنية Vector جديدة.
تحليل النوع

كما هو موضح في مثال التعليمات البرمجية المقدم، الانعكاس يُظهر التحليل أن كلا من &Vector{} وnew(Vector) يُرجعان مؤشرات من نفس النوع، حيث أن كلاهما مؤشرات لمثيلات بنية Vector.

ارتباك تاريخي

لقد ناقشت قائمة Go البريدية سابقًا المخاوف بشأن وجود كل من new() و& لتخصيص الذاكرة، حيث يمكن أن يؤدي ذلك إلى حدوث ارتباك.

حالة خاصة

من الجدير بالذكر أن new() هي الطريقة الوحيدة للحصول على مؤشر إلى نوع أساسي غير مسمى، مثل عدد صحيح. يمكن ملاحظة ذلك في المثال التالي:

p := new(int) // صالح p := &int{0} // غير صالح

p := new(int) // valid
p := &int{0} // invalid
التفضيل والاستخدام

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

بيان الافراج أعيد طبع هذه المقالة على: 1729661717 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3