Go Academy · درس

تعريف البُنى واستخدامها

ثوابت البُنى والوصول إلى الحقول والتضمين

الدرس 1 من 413 خطوة

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

ما هي البنية؟

تجمع البنية حقولًا مترابطة من أنواع مختلفة ضمن نوع مُسمّى واحد. وهي الآلية الأساسية في Go لتعريف هياكل بيانات مخصصة — وتشبه الفئة، ولكن من دون التوريث.

تعريف البنية

عرّف نوع بنية باستخدام الكلمة المفتاحية type:

package main
import "fmt"

type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    p := Person{Name: "Alice", Age: 30, City: "London"}
    fmt.Println(p)
}

قوالب البنية

يوجد أسلوبان: الحقول المُسمّاة (وهو المفضّل) والحقول الموضعية (تعتمد على الترتيب وهشّة):

package main

type Point struct{ X, Y int }

func main() {
    p1 := Point{X: 1, Y: 2} // named — preferred
    p2 := Point{3, 4}        // positional — avoid in non-test code
    _ = p1; _ = p2
}

الوصول إلى الحقول

استخدم تدوين النقطة لقراءة الحقول وكتابتها:

package main
import "fmt"

type Car struct{ Brand string; Speed int }

func main() {
    c := Car{Brand: "Tesla", Speed: 200}
    fmt.Println(c.Brand)  // Tesla
    c.Speed = 250
    fmt.Println(c.Speed)  // 250
}

القيمة الصفرية للبنية

تحتوي القيمة الصفرية للبنية على القيم الصفرية الخاصة بكل حقل. ويمكنك استخدامها بأمان من دون تهيئة:

package main
import "fmt"

type Config struct{ Debug bool; Port int; Host string }

func main() {
    var cfg Config
    fmt.Println(cfg) // {false 0 }
    cfg.Port = 8080
    fmt.Println(cfg) // {false 8080 }
}

مقارنة البنى

يمكن مقارنة البنى باستخدام == إذا كانت جميع حقولها قابلة للمقارنة:

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    a := Point{1, 2}
    b := Point{1, 2}
    c := Point{3, 4}
    fmt.Println(a == b) // true
    fmt.Println(a == c) // false
}

البنى أنواع قيمية

يؤدي إسناد بنية إلى نسخ جميع حقولها. ولا تؤثر التغييرات في النسخة على الأصلية:

package main
import "fmt"

type Rect struct{ W, H int }

func main() {
    r1 := Rect{10, 20}
    r2 := r1
    r2.W = 99
    fmt.Println(r1) // {10 20}
    fmt.Println(r2) // {99 20}
}

البنى المتداخلة

يمكن أن يكون حقل البنية نفسه بنية:

package main
import "fmt"

type Address struct{ City, Country string }
type Employee struct {
    Name    string
    Age     int
    Address Address
}

func main() {
    e := Employee{Name: "Bob", Age: 28, Address: Address{"Berlin", "DE"}}
    fmt.Println(e.Address.City) // Berlin
}

الحقول المُصدَّرة وغير المُصدَّرة

الحقول التي تبدأ بحرف كبير هي حقول مُصدَّرة (عامة). أما الحقول التي تبدأ بحرف صغير فهي حقول غير مُصدَّرة (خاصة بالحزمة):

package main

type config struct {
    host string // unexported
    Port int    // exported
}

func main() {
    c := config{host: "localhost", Port: 8080}
    _ = c
}

وسوم البنية

توفر وسوم البنية بيانات وصفية (مثلًا لترميز JSON). وهي أحرف نصية توضع بعد نوع الحقل:

package main

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email,omitempty"`
}

func main() { _ = User{} }

تحقق سريع

ما القيمة الصفرية لحقل bool في بنية؟

مراجعة: البنى

أهم النقاط:

  • تجمع البنى الحقول المترابطة في نوع مُسمّى
  • استخدم قوالب الحقول المُسمّاة — وتجنب القوالب الموضعية
  • البنى أنواع قيمية — ويؤدي الإسناد إلى النسخ
  • الحقول التي تبدأ بحرف كبير تكون مُصدَّرة
  • تضيف وسوم البنية بيانات وصفية إلى مكتبات مثل encoding/json

مهمة تدريبية

عرّف بنية Product بالحقول Name string وPrice float64 وInStock bool. أنشئ مثيلين، وقارنهما باستخدام ==، ثم اطبع النتيجة.

البدء مجانًا

تعلم Go مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

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

هل درس «تعريف البُنى واستخدامها» مجاني؟

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

ماذا ستتعلم في «تعريف البُنى واستخدامها»؟

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

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

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

كم من الوقت يستغرق درس «تعريف البُنى واستخدامها»؟

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

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

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

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

  1. تعريف البُنى واستخدامها
  2. الطرائق على البُنى
  3. أنماط المُنشئات
  4. البُنى المجهولة والتركيب
← العودة إلى Go Academy