الـ Structs المضمنة
جزء من قسم الأساسيات في رحلة GO على Coddy. الدرس 99 من 109.
تتيح لك Go تضمين بنية داخل بنية أخرى، ما يؤدي إلى إنشاء علاقات تركيب. هذا هو نهج Go في الوراثة.
عرّف بنيتين، مع تضمين إحداهما داخل الأخرى:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // بنية مضمّنة (بلا اسم للحقل)
}
func main() {
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
// الوصول إلى الحقول مباشرةً
fmt.Println(person.city) // الوصول إلى الحقل المضمّن
}
يُظهر الناتج أننا نستطيع الوصول إلى حقول البنية المضمّنة مباشرةً:
Portlandالتحدي
مبتدئفي هذا التحدي، ستتدرّب على استخدام البُنى المضمّنة (التركيب) في Go.
لدينا بنيتان: Address وPerson. ينبغي أن تضمّن البنية Person البنية Address لكي يتمكن الشخص من الوصول مباشرةً إلى حقول العنوان.
مهمتك هي إكمال تعريف البنية Person لتضمين البنية Address. عبارات الطباعة في main تقرأ بالفعل حقول العنوان مباشرةً من الشخص (person.Street وperson.City وperson.ZipCode)؛ وستُترجم هذه العبارات بنجاح عند تضمين Address.
جرّب بنفسك
package main
import "fmt"
// تحتوي البنية Address على معلومات الموقع
type Address struct {
Street string
City string
ZipCode string
}
// يجب أن تُضمِّن البنية Person البنية Address
type Person struct {
Name string
Age int
// TODO: ضمِّن البنية Address هنا (سطر واحد فقط)
}
func main() {
// أنشئ شخصًا جديدًا مع معلومات العنوان
person := Person{
Name: "Alice",
Age: 30,
Address: Address{
Street: "123 Main St",
City: "Wonderland",
ZipCode: "12345",
},
}
// اطبع معلومات الشخص، بما في ذلك العنوان
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
// اطبع حقول العنوان مباشرةً من نسخة الشخص
fmt.Println("Street:", person.Street)
fmt.Println("City:", person.City)
fmt.Println("ZipCode:", person.ZipCode)
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4معاملات المقارنة والمعاملات المنطقية
معاملات المقارنة - الجزء 1معاملات المقارنة - الجزء 2معامل AND المنطقيمعامل OR المنطقيمعامل NOT المنطقيأساسيات أولوية المعاملاتملخص - إجراء المقارنات7تدفق التحكم: الحلقات التكرارية
شرح حلقة `for`حلقة `for` - أساسياتحلقة `for` - بشرط فقطالكلمة المفتاحية `break`الكلمة المفتاحية `continue`الحلقات المتداخلةملخص - تكرار العمليات10الأنواع المركبة: المصفوفات
مقدمة إلى المصفوفاتالتصريح عن المصفوفاتتهيئة المصفوفاتالوصول إلى عناصر المصفوفةطول المصفوفة باستخدام `len`التكرار عبر المصفوفاتالمصفوفات متعددة الأبعاد13الأنواع المركبة: Structs
تعريف أنواع مخصصةإنشاء نماذج من الـ Structsالوصول إلى حقول الـ Structالمؤشرات إلى الـ Structsتهيئة الـ Structsالـ Structs المضمنةالـ Structs المجهولةمراجعة - هياكل البيانات المخصصة2المتغيرات وأنواع البيانات الأساسية
ما هو المتغير؟استنتاج النوع باستخدام `:=`الأعداد الصحيحة (int)أرقام الفاصلة العائمةالقيم المنطقية (Booleans)النصوص (Strings)القيم الصفريةالثوابتقواعد التسميةملخص - المتغيرات والأنواع5الإدخال والإخراج الأساسي
المخرجات المنسقةرموز التنسيقطباعة الأنواعالحصول على مدخلات المستخدم الأساسيةملخص - الإدخال والإخراج8الدوال
فهم الدوالالتصريح عن دالةاستدعاء الدوالمعاملات الدالةإرجاع قيمة واحدةإرجاع قيم متعددةقيم الإرجاع المسماةأساسيات نطاق الدالةملخص - إنشاء كود قابل لإعادة الاستخدام3المعاملات الأساسية
المعاملات الحسابيةمعامل القسمةمعامل باقي القسمةمعامل التعيينمعاملات التعيين المركبةالزيادة والنقصانملخص - الحسابات6تدفق التحكم: الجمل الشرطية
جملة `if`الكلمة المفتاحية `else`الكلمة المفتاحية `else if`تظليل المتغيرات في `if`تهيئة المتغيراتجملة `switch``switch` مع التعبيرات`switch` بدون تعبيرالكلمة المفتاحية `fallthrough`ملخص - اتخاذ القراراتتدرّب بنفسك: مترجم Go عبر الإنترنت