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

كيف تؤثر المؤشرات على تعديل القيمة في وظائف Go؟

تم النشر بتاريخ 2024-11-07
تصفح:829

How do pointers affect value modification in Go functions?

فهم تعديل القيمة باستخدام المؤشرات في Go

في Go، تسمح المؤشرات بالوصول غير المباشر إلى القيم وتعديلها. ومع ذلك، فإن فهم كيفية عمل المؤشرات أمر بالغ الأهمية عند تمريرها إلى الوظائف.

عند تمرير مؤشر إلى دالة، ينشأ سيناريوهان: تعديل القيمة مقابل إعادة تعيين المؤشر.

السيناريو 1 : تعديل القيمة

ضع في اعتبارك هذا الرمز:

اكتب بنية الاختبار { Value int } الوظيفة الرئيسية () { فار ط اختبار = اختبار {2} var p *Test = &i و (ع) println(i.Value) // 4 } وظيفة و (ع * اختبار) { *ع = اختبار{4}
type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}

سيناريو 2: إعادة تعيين المؤشر

الآن، دعنا نغير الكود قليلاً:

type Test struct { Value int } الوظيفة الرئيسية () { فار ط اختبار = اختبار {2} var p *Test = &i و (ع) println(i.Value) // 2 } وظيفة و (ع * اختبار) { // ؟ ع = &اختبار{4}
type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &Test{4}
}

الحل: تعديل القيمة المدببة

لتعديل القيمة المدببة، يجب علينا إلغاء الإشارة إلى المؤشر ومباشرة الوصول إلى عضو البنية:

اكتب بنية الاختبار { Value int } الوظيفة الرئيسية () { فار ط اختبار = اختبار {2} var p *Test = &i و (ع) println(i.Value) // 4 } وظيفة و (ع * اختبار) { القيمة ص = 4
type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3