0Pricing
Go Academy · درس

تضمين Struct

كوّن البُنى

تضمين Struct درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

تركيب البنى

لا تحتوي Go على وراثة الأصناف. بدلًا من ذلك، توفر التضمين: ضع بنية داخل بنية أخرى من دون اسم حقل لإعادة استخدام حقولها وأساليبها.

الحقول المجهولة

يُصرَّح عن الحقل المضمّن باستخدام النوع فقط، من دون اسم. وتُرقّى أعضاؤه إلى البنية الخارجية.

package main

import "fmt"

type Engine struct{ Power int }

type Car struct {
	Engine
	Brand string
}

func main() {
	c := Car{Engine: Engine{Power: 150}, Brand: "Coddy"}
	fmt.Println(c.Power, c.Brand)
}

الوصول إلى الحقول المُرقّاة

تقرأ c.Power مباشرة، رغم أن Power ينتمي إلى Engine المضمّنة. وهذا هو ترويج الحقول.

لا يزال المسار الكامل متاحًا

يمكنك دائمًا الوصول إلى البنية المضمّنة صراحةً عبر اسم نوعها.

package main

import "fmt"

type Engine struct{ Power int }
type Car struct{ Engine }

func main() {
	c := Car{Engine{200}}
	fmt.Println(c.Engine.Power)
	fmt.Println(c.Power)
}

التضمين مقابل الحقل المسمّى

يتطلب الحقل المسمّى (engine Engine) استخدام c.engine.Power. أما التضمين (Engine) فيرقّي الأعضاء، ولذلك تكتب c.Power. ويعبّر التضمين عن علاقة نوع من.

تهيئة البنى المضمّنة

استخدم اسم النوع بوصفه مفتاح الحقل في المُنشئ المركب.

package main

import "fmt"

type Address struct{ City string }
type User struct {
	Address
	Name string
}

func main() {
	u := User{Address: Address{City: "Istanbul"}, Name: "Mert"}
	fmt.Println(u.Name, "in", u.City)
}

التضمينات المتعددة

يمكن للبنية تضمين عدة أنواع ودمج حقولها معًا.

package main

import "fmt"

type Timestamps struct{ Created string }
type Author struct{ Name string }
type Post struct {
	Timestamps
	Author
	Title string
}

func main() {
	p := Post{Timestamps{"today"}, Author{"Ada"}, "Hello"}
	fmt.Println(p.Title, p.Name, p.Created)
}

تعارض الأسماء

إذا اشترك نوعان مضمّنان في اسم حقل، فستؤدي الإشارة الغامضة إلى خطأ في الترجمة؛ ويجب تحديد الحقل باسم النوع لإزالة الغموض.

حجب البنية الخارجية

يحجب الحقل المصرّح عنه في البنية الخارجية حقلًا مُرقّى يحمل الاسم نفسه. ويكون الحقل الخارجي هو المستخدم عند الوصول غير المؤهل.

package main

import "fmt"

type Base struct{ ID int }
type Item struct {
	Base
	ID int
}

func main() {
	i := Item{Base{1}, 99}
	fmt.Println(i.ID, i.Base.ID)
}

تضمين المؤشّرات

يمكنك تضمين نوع مؤشّر. وستظل أعضاؤه مُرقّاة، لكن يجب تهيئة المؤشّر، وإلا فقد تتعرض لإلغاء إشارة مؤشّر nil.

package main

import "fmt"

type Logger struct{ Prefix string }
type Service struct{ *Logger }

func main() {
	s := Service{Logger: &Logger{Prefix: "[svc]"}}
	fmt.Println(s.Prefix)
}

متى نستخدم التضمين

  • إعادة استخدام الحقول الشائعة، مثل الطوابع الزمنية والمعرّفات
  • بناء أنواع أغنى انطلاقًا من أنواع أصغر
  • تجنب التداخل العميق ومسارات الوصول المطوّلة

تحقق سريع

اختبر معرفتك بتضمين البنى.

مراجعة

تعلمت تضمين البنى.

  • ترقّي الحقول المجهولة أعضاءها إلى البنية الخارجية
  • يمكن الوصول إليها عبر c.Power أو c.Engine.Power
  • تحجب الحقول الخارجية الحقول المُرقّاة
  • تتطلب التعارضات تحديدًا صريحًا
  • يعمل تضمين المؤشّرات أيضًا

الأسئلة الشائعة

هل درس «تضمين Struct» مجاني؟

نعم — نص درس «تضمين Struct» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «تضمين Struct»؟

كوّن البُنى تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تضمين Struct»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تضمين Struct
  2. تضمين Interface
  3. ترقية الدوال
  4. التركيب بدلًا من الوراثة
← العودة إلى Go Academy