عند النظر إلى الشيفرة التي قدمتها في الرابط المشار إليه، يظهر أن لغة البرمجة Golang تتبنى نهجًا مختلفًا للوراثة في الهياكل (structs) مقارنةً بلغات أخرى. في هذا السياق، يبدو أن هناك بعض الالتباسات حول كيفية استخدام وتهيئة هياكل البيانات التي تعتمد على التوريث في Golang.
عندما تقوم بتعريف هيكل البيانات Something
الذي يرث من هيكل Base
، فإنك في الواقع لا تحتاج إلى تحديد حقول Base
عند إنشاء مثيل من نوع Something
. بمعنى آخر، لا تحتاج إلى تفصيل a
و b
عند إنشاء مثيل من Something
.
-
كيف أستفيد من البرمجة ماديا؟24/10/2023
-
إعداد وتثبيت PostgreSQL: دليل شامل23/11/2023
الشيفرة الصحيحة تكون كالتالي:
gopackage main
import "fmt"
type Base struct {
a string
b string
}
type Something struct {
Base
c string
}
func main() {
s := Something{
Base: Base{
a: "letter a",
b: "letter b",
},
c: "letter c",
}
fmt.Println(s.a, s.b, s.c)
}
في هذا المثال، يتم تعيين قيم لحقول a
و b
من خلال تهيئة الجزء Base
من Something
. الخطأ الذي تم الإبلاغ عنه يعود إلى عدم الفهم الصحيح لكيفية التعامل مع حقول الهياكل الموروثة في Golang.
يجدر بالذكر أن Golang لا تدعم مصطلح “وراثة” بشكل صريح، بل تستخدم الهياكل المدمجة لتحقيق تأثير يشبه التوريث. هذا يتيح للمطورين تنظيم البيانات بشكل هرمي دون الحاجة إلى كلمات مفتاحية مثل extends
أو inherits
.
للمزيد من التوضيح وتفاصيل حول كيفية استخدام وتهيئة الهياكل في Golang، يمكن الاطلاع على مستندات لغة البرمجة Golang.
المزيد من المعلومات
بالتأكيد، دعونا نستكشف المزيد من المعلومات حول استخدام الهياكل والوراثة في لغة البرمجة Golang.
الهياكل في Golang:
في Golang، يُستخدم مصطلح “struct” لتعريف الهياكل. الهيكل يمكن أن يحتوي على حقول (fields) مختلفة، ويُستخدم لتمثيل بيانات متعددة الأنواع.
gotype Person struct {
Name string
Age int
}
التوريث في Golang:
Golang لا تدعم التوريث بنفس الشكل الذي يتم استخدامه في بعض اللغات الأخرى. في الهياكل، يُمكن استخدام الهياكل المدمجة لتحقيق تأثير يشبه التوريث. في المثال الذي قدمته سابقًا:
gotype Base struct {
a string
b string
}
type Something struct {
Base
c string
}
Something
يحتوي على Base
كجزء منه، ويمكن الوصول إلى حقول Base
كجزء من Something
.
كيفية إنشاء مثيل:
عند إنشاء مثيل من الهيكل Something
، يُفضل تهيئة حقول Base
مباشرة:
gos := Something{
Base: Base{
a: "letter a",
b: "letter b",
},
c: "letter c",
}
استخدام المثيل:
يمكن الوصول إلى حقول Base
و Something
بشكل منفصل:
gofmt.Println(s.a) // "letter a"
fmt.Println(s.b) // "letter b"
fmt.Println(s.c) // "letter c"
استنتاج:
تُظهر لغة Golang سهولة في التعامل مع الهياكل والبيانات، وتقدم نهجًا مبسطًا لتنظيم البرمجة الموجهة للكائنات. على الرغم من عدم وجود مصطلح “وراثة” في السياق التقليدي، يمكن للمبرمجين تحقيق تأثير مشابه باستخدام الهياكل المدمجة.