معضلة شائعة عند تحديد أساليب البناء.
على وجه الخصوص عند تحديد مستقبلات الطريقة الخاصة بك ، هل يجب عليك استخدام مستقبلات المؤشر أو مستقبلات القيمة؟
func (t *Type) Method() {} //pointer receiver
ضد
func (t Type) Method() {} //value receiver
يمكن استيعاب مُستقبِلات الطريقة لوظائف الوسائط في سلوكها ، ولا يزال كل ما ينطبق على تمرير مؤشر أو قيمة كوسيطة دالة ساريًا على مستقبلات الطريقة.
متى يجب استخدام مستقبلات المؤشر
قم بتعديل جهاز الاستقبال
إذا كنت ترغب في تغيير حالة المتلقي بطريقة ما ، والتلاعب بقيمة ذلك ،استخدم جهاز استقبال المؤشر. لا يمكن استخدام جهاز استقبال القيمة الذي ينسخ بالقيمة. أي تعديل على مستقبل القيمة يكون محليًا لتلك النسخة.
الاقوي
إذا كانت البنية التي تحدد الطريقة عليها كبيرة جدًا ، فسيكون نسخها مكلفًا للغاية من استخدام مستقبل القيمة.
تعمل مستقبلات القيمة على نسخة من قيمة النوع الأصلي. هذا يعني أن هناك تكلفة متضمنة ، خاصة إذا كانت البنية كبيرة جدًا ، وكان المؤشر المستلم أكثر كفاءة.
عندما تكون مستقبلات القيمة أفضل
إذا لم تكن بحاجة إلى تعديل قيمة جهاز الاستقبال ،استخدام جهاز استقبال القيمة.
مستقبلات القيمة آمنة التزامن ، في حينأجهزة استقبال المؤشر ليست آمنة للتزامن.
متى يجب إجراء المقايضة
هناك موقف قد ترغب فيه في استخدام مستقبلات المؤشر للطرق التي تستخدم فيها عادةً مستقبل القيمة ، ويكون ذلك عندما يكون لديك مستقبلات مؤشر أخرى محددة على هذا النوع ، ولالتناسقيجب عليك استخدام مستقبلات المؤشر عبر جميع الطرق.
اقرأ أكثر
المزيد من دروس Go:
- استخدام وكيل NGINX العكسي لخدمة خدمات Go
- عمل نسخة من هيكل في Go
- أساسيات Go Web Server
- فرز نوع الخريطة في Go
- الذهاب المؤشرات باختصار
- وأوضح Go Tags
- الذهاب تنسيق التاريخ والوقت
- معالجة JSON باستخدام Go
- وظائف متنوعة
- ورقة الغش Go Strings
- شرح واجهة Go Empty
- تصحيح الأخطاء الذهاب مع VS Code و Delve
- تقوم Named Go بإرجاع المعلمات
- توليد أرقام وسلاسل عشوائية في Go
- بنية نظام الملفات لمشروع Go
- تم تنفيذ خوارزمية البحث الثنائي في Go
- استخدام إشارات سطر الأوامر في Go
- أوضح جوباته
- أنشئ تطبيق Command Line باستخدام Go: lolcat
- إنشاء أمر CLI باستخدام Go: cowsay
- استخدام أنابيب شل مع Go
- Go CLI التعليمي: Fortune clone
- ضع قائمة بالملفات في مجلد باستخدام Go
- استخدم Go للحصول على قائمة بالمستودعات من GitHub
- اذهب ، قم بإلحاق شريحة من السلاسل بملف
- اذهب ، قم بتحويل سلسلة إلى شريحة بايت
- تصور مساهمات Git المحلية الخاصة بك مع Go
- الشروع في استخدام Go CPU وتوصيف الذاكرة
- حل الخطأ "لا يدعم الفهرسة" في برنامج Go
- قياس وقت التنفيذ في برنامج Go
- بناء زاحف الويب باستخدام Go لاكتشاف العناوين المكررة
- Go Best Practices: المؤشر أم مستقبلات القيمة؟
- Go Best Practices: هل يجب عليك استخدام طريقة أم دالة؟
- Go Data Structures: Set
- ورقة الغش في خرائط Go
- إنشاء تطبيقات لأنواع عامة في Go
- Go Data Structures: القاموس
- Go هياكل البيانات: Hash Table
- تنفيذ مستمعي الأحداث في الانتقال عبر القنوات
- Go Data Structures: Stack
- Go هياكل البيانات: قائمة الانتظار
- Go Data Structures: Binary Search Tree
- Go هياكل البيانات: رسم بياني
- Go Data Structures: قائمة مرتبطة
- الدليل الكامل إلى Go Data Structures
- مقارنة قيم Go
- هل Go موجه للكائن؟
- العمل مع قاعدة بيانات SQL في Go
- استخدام متغيرات البيئة في Go
- Go البرنامج التعليمي: REST API مدعوم من PostgreSQL
- تمكين CORS على خادم Go Web
- نشر تطبيق Go في حاوية Docker
- لماذا Go هي لغة قوية للتعلم كمطور PHP
- اذهب ، قم بإزالة io.Reader.ReadString حرف سطر جديد
- اذهب ، كيف تراقب التغييرات وتعيد بناء برنامجك
- اذهب وعد الأشهر منذ تاريخ
- الوصول إلى معلمات HTTP POST في Go