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

لماذا لا تعدل طريقة GO الخاص بي قيمة المثيل إلا إذا كنت أستخدم جهاز استقبال المؤشر؟

نشر في 2025-02-06
تصفح:880

Why Doesn't My Go Method Modify the Instance Value Unless I Use a Pointer Receiver?
أجهزة الاستقبال. في هذا المثال ، لا تعمل طريقة SetSomeField كما هو متوقع لأن جهاز الاستقبال الخاص به ليس من نوع المؤشر. FUNC (i *Application) SetSomeField (NewValue String) { ... }

ومع ذلك ، يقدم هذا التغيير مشكلة جديدة: لم يعد البنية تنفذ الواجهة لأن طريقة GetSomefield لا تزال تحتوي على مستقبل قيمة. تنفيذ الواجهة. من خلال القيام بذلك ، نمكّن طريقة تعديل المثيل الفعلي دون إنشاء نسخة. إليك الرمز المعدل: اكتب واجهة iface { SetSomeField (سلسلة NewValue) GetSomefield () سلسلة } اكتب هيكل التنفيذ { Somefield String } FUNC (i *Application) getSomefield () string { إرجاع I.Somefield } FUNC (i *Application) SetSomeField (NewValue String) { I.Somefield = newValue } FUNC CREANT () *تطبيق { إرجاع وتنفيذ {Somefield: "Hello"} } Func Main () { var a iface a = create () A.Setsomefield ("World") fmt.println (A.GetSomefield ()) }

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

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

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

Copyright© 2022 湘ICP备2022001581号-3