هل يؤدي التعيين بين الأسماء المستعارة إلى النسخ في Go؟
يسمح Go بتعريف الأنواع المخصصة باستخدام الأسماء المستعارة. تنشأ مخاوف بشأن ما إذا كانت التحويلات بين أنواع الأسماء المستعارة هذه تؤدي إلى نسخ أو مجرد تغييرات هيكلية.
خذ بعين الاعتبار هذا المثال:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s) // Are ms or s2 a full copy of s?
الإجابة:
وفقًا لقواعد التحويل الخاصة بـ Go، قد تؤدي التحويلات غير الثابتة بين الأنواع الرقمية أو السلاسل إلى حدوث خطأ تكلفة وقت التشغيل بسبب تغييرات التمثيل. ومع ذلك، فإن جميع التحويلات الأخرى، مثل تلك التي تتم بين الأسماء المستعارة،تحافظ على التمثيل الأصلي دون إنشاء نسخ.
لذلك، كلا من ms وs2 ليسا نسختين كاملتين من s ولكنهما يشيران إلى نفس القيمة الأساسية. .التأثير على استدعاءات الوظائف:
عند تمرير القيم إلى الوظائف، يتم إنشاء النسخ بشكل عام. ومع ذلك، هذا لا ينطبق على أنواع الأسماء المستعارة. لا يؤدي تعيين قيمة مكتوبة باسم مستعار لمعلمة دالة إلى تشغيل النسخ:func foo(s MyString){ ... } foo(ms) // لا يتم عمل نسخة عند تمرير ms إلى foo()func foo(s MyString){ ... } foo(ms) // No copy is made when passing ms to foo()باختصار، في حين أن التحويلات بين أنواع الأسماء المستعارة لا تنشئ نسخًا من القيمة الأساسية، فإن هذا المبدأ لا يمتد إلى تمرير القيم إلى الوظائف حيث يتم عمل النسخ بشكل عام.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3