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

عند تضمين الهياكل في Go: مؤشرات أم قيم مضمنة؟

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

When Embedding Structs in Go: Pointers or Embedded Values?

هياكل التضمين: متى يتم تفضيل المؤشرات

عند تضمين بنية واحدة داخل أخرى، هناك خياران: استخدام مؤشر أو قيمة مضمنة . لتوجيه هذا القرار، من المهم فهم المواصفات والنظر في مزايا كل نهج.

المؤشرات مقابل القيم المضمنة

وفقًا لمواصفات Go، يمكن الإعلان عن الحقل المجهول (المعروف أيضًا باسم الحقل المضمن) كاسم نوع أو كمؤشر لاسم نوع غير واجهة. هذا يعني أن لديك خيار استخدام النوع log.Logger أو المؤشر *log.Logger لحقل المسجل في المثال التالي:

type Job struct {
    Command string
    *log.Logger
}

فوائد المؤشرات

تسلط مقالة "التضمين في Go" التي كتبها إريك أوربان الضوء على مزايا تضمين المؤشر، والذي يشار إليه باسم "تضمين المؤشر بواسطة ". وتشمل هذه ما يلي:

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

مثال على تضمين المؤشر

type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}

في هذا المثال، يقوم نوع العارض بتضمين صورة نقطية بواسطة المؤشر. وهذا يعني أنه يمكن لمثيلات متعددة من Renderer مشاركة مثيل واحد من الصورة النقطية وتخصيص سلوكها بشكل مستقل.

القيود الفنية

من المهم ملاحظة أنه لا يمكنك استخدام المؤشرات للمؤشرات أو مؤشرات إلى واجهات كحقول مجهولة. ينبع هذا التقييد من حقيقة أن هذه الأنواع ليس لديها طرق، وهو جانب أساسي من جوانب التضمين. يتم ترقية الأساليب من النوع المضمن إلى نوع التضمين، مما يسمح لك بالوصول إليها مباشرة.

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

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

Copyright© 2022 湘ICP备2022001581号-3