الذهاب المؤشرات باختصار

المؤشرات ليست فريدة من نوعها في Go ، ولكن Go لها نكهة فريدة من المؤشرات ، لذلك من الجيد معرفة سبب كونها فريدة ، حيث ستستخدم المؤشرات في كل برنامج Go.

لماذا المؤشرات؟

يتم تمرير كل شيء في Go بالقيمة ، كما فيجوفي جميع اللغات التي تنحدر من C.

إذا قمت بتمرير Int إلى دالة ، يتم نسخ المتغير.

إذا مررت مؤشرًا ، فسيتم نسخ المؤشر ، ولكنليسالقيمة التي تشير إليها.

لذلك ، في معظم الحالات ، تُستخدم المؤشرات لاستدعاء الوظائف وتمرير المعلمات حسب المرجع.

مثال

لنأخذ متغيرًا بسيطًاx، يُعرَّف بأنه عدد صحيح ذي قيمة5:

x := 5

الآن ، عنوان ذاكرةxيمكن الحصول عليها باستخدام&x

إذا قمت بطباعة ملفات&xمعfmt.Println، سترى أنه شيء مثل0xc42000e248: عنوان الذاكرة.

الآن ، يمكننا إسناد هذه القيمة إلى متغير ، وسيكون هذا المتغير مؤشرًا لهx.

y := &x

إذا كتبنا بيان التخصيص هذا

*y = 10

الxستكون القيمة الآن10.

لا يوجد مؤشر حسابي

تتشابه مؤشرات Go مع مؤشرات C و C ++ ، لكنها أكثر أمانًا ، حيث لا يمكنك إجراء عمليات مثل

var x *int;
x++;

على مؤشر ، لأنه لا يمكن تغيير عنوان المؤشر. لا يوجد مؤشر / مجموعة ثنائية.

إرجاع مؤشرات متغيرات الوظيفة المحلية

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

مؤشرات لا شيء

القيمة الصفرية للمؤشر هيnil. هذا يعني أن مؤشر الصفري لا يزال ممكنًا ، ولكن هذا يسبب مشاكل أقل من اللغات الأخرى (C ، Java ، C ++) نظرًا لوجود عدد أقل من الأنواع المقنعة كمؤشرات ، وعدد أقل من الصفوف الأخرى الموجودة حولها. على سبيل المثال ، السلاسل في لغة سي هي مؤشرات. في Go ، هم من النوع.

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

مراجع


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