مؤشرات Go: أنواع المتلقي والقيمة
في Go، لا غنى عن المؤشرات لفهم البرمجة الموجهة للكائنات وإدارة الذاكرة. عند التعامل مع المؤشرات، من المهم فهم التمييز بين أنواع أجهزة الاستقبال في الأساليب.يوضح مثال Go Tour الذي قدمته هذا المفهوم:type Vertex struct { X، Y تعويم64 } وظيفة (v *Vertex) Abs() float64 { إرجاع math.Sqrt(v.X*v.X v.Y*v.Y) } الوظيفة الرئيسية () { الخامس := &القمة{3، 4} fmt.Println(v.Abs())type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) }هنا، تتلقى طريقة Abs مستقبل المؤشر (*Vertex). ومع ذلك، لاحظت أنه يمكنك أيضًا استخدام مستقبل القيمة (Vertex) والحصول على نفس النتيجة. كيف يكون هذا ممكنًا؟
أنواع المتلقي والقيمة
يسمح Go بالطرق المشتقة. يمكن أن ترث الطريقة التي تحتوي على مستقبل المؤشر من الطريقة التي تحتوي على مستقبل القيمة. هذا يعني أن طريقة استقبال القيمة، على سبيل المثال، func (v Vertex) Abs() float64، تقوم تلقائيًا بإنشاء طريقة استقبال المؤشر:func (v Vertex) Abs() float64 { return math.Sqrt(v.X* v.X v.Y*v.Y) } func (v *Vertex) Abs() float64 { return Vertex.Abs(*v) } // الطريقة التي تم إنشاؤهاfunc (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } func (v *Vertex) Abs() float64 { return Vertex.Abs(*v) } // GENERATED METHOD
أخذ العناوين تلقائيًا
ميزة أخرى مهمة هي Go's أخذ العنوان التلقائي. خذ بعين الاعتبار الكود التالي بدون مستقبل مؤشر صريح:func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } الوظيفة الرئيسية () { الخامس:= قمة الرأس{3، 4} v.Abs()type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) }يأخذ Go ضمنيًا عنوان القيمة التي تم تمريرها إلى طريقة Abs. وهذا يعادل ما يلي:vp := &v vp.Abs()
type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) }
الاستنتاج
في Go، يعد فهم دور أنواع أجهزة الاستقبال وميزة أخذ العناوين التلقائية أمرًا بالغ الأهمية لاستخدام المؤشر بكفاءة. يمكنك اشتقاق أساليب استقبال المؤشر من أساليب استقبال القيمة، وسيقوم Go تلقائيًا بتمرير عنوان القيم دون استخدام المؤشرات بشكل صريح.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3