Go Best Practices: المؤشر أم مستقبلات القيمة؟

معضلة شائعة عند تحديد أساليب البناء.

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

func (t *Type) Method() {} //pointer receiver

ضد

func (t Type) Method() {} //value receiver

يمكن استيعاب مُستقبِلات الطريقة لوظائف الوسائط في سلوكها ، ولا يزال كل ما ينطبق على تمرير مؤشر أو قيمة كوسيطة دالة ساريًا على مستقبلات الطريقة.

متى يجب استخدام مستقبلات المؤشر

قم بتعديل جهاز الاستقبال

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

الاقوي

إذا كانت البنية التي تحدد الطريقة عليها كبيرة جدًا ، فسيكون نسخها مكلفًا للغاية من استخدام مستقبل القيمة.

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

عندما تكون مستقبلات القيمة أفضل

إذا لم تكن بحاجة إلى تعديل قيمة جهاز الاستقبال ،استخدام جهاز استقبال القيمة.

مستقبلات القيمة آمنة التزامن ، في حينأجهزة استقبال المؤشر ليست آمنة للتزامن.

متى يجب إجراء المقايضة

هناك موقف قد ترغب فيه في استخدام مستقبلات المؤشر للطرق التي تستخدم فيها عادةً مستقبل القيمة ، ويكون ذلك عندما يكون لديك مستقبلات مؤشر أخرى محددة على هذا النوع ، ولالتناسقيجب عليك استخدام مستقبلات المؤشر عبر جميع الطرق.

اقرأ أكثر


المزيد من دروس Go: