Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تهيئة الـ Struct

جزء من قسم Object Oriented Programming في رحلة GO على Coddy — الدرس 9 من 107.

توفر لغة Go عدة طرق لتهيئة الهياكل (structs)، كل منها مفيد في مواقف مختلفة.

تهيئة الحقول المسماة

type Person struct {
    Name string
    Age  int
    City string
}

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

التهيئة الموضعية (يجب أن يتطابق الترتيب مع إعلان الحقول)

p2 := Person{"Bob", 30, "London"}

التهيئة بالقيمة الصفرية (تحصل جميع الحقول على قيم افتراضية)

p3 := Person{}
// Name: "", Age: 0, City: ""

تهيئة جزئية (الحقول غير المحددة تحصل على قيم صفرية)

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

مؤشر إلى struct باستخدام &

p5 := &Person{
    Name: "Diana",
    Age:  28,
    City: "Paris",
}
fmt.Println(p5.Name) // Diana

استخدام var ثم تعيين الحقول

var p6 Person
p6.Name = "Eve"
p6.Age = 22

تعد تهيئة الحقول المسماة هي الطريقة الأكثر شيوعاً ووضوحاً. استخدم & عندما تحتاج إلى مؤشر (pointer) إلى الـ struct.

challenge icon

التحدي

متوسط

قم بإنشاء ثلاثة كائنات Player باستخدام طرق تهيئة مختلفة:

  • player1: تهيئة الحقول المسماة (Named field initialization) باستخدام قيم الإدخال
  • player2: تهيئة الحقول المسماة مع Name: "Guest"، و Class: "Novice"، و HitPoints: 50
  • player3: استخدم إعلان var ثم قم بتعيين كل حقل بشكل فردي

ورقة مرجعية

توفر لغة Go عدة طرق لتهيئة الهياكل (structs):

التهيئة باستخدام أسماء الحقول (الأكثر شيوعاً ووضوحاً):

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

التهيئة الموضعية (يجب أن يتطابق الترتيب مع ترتيب إعلان الحقول):

p2 := Person{"Bob", 30, "London"}

التهيئة بالقيمة الصفرية (تحصل جميع الحقول على القيم الافتراضية):

p3 := Person{}
// Name: "", Age: 0, City: ""

التهيئة الجزئية (تحصل الحقول غير المحددة على قيم صفرية):

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

مؤشر إلى هيكل (Pointer to a struct) باستخدام &:

p5 := &Person{
    Name: "Diana",
    Age:  28,
}
fmt.Println(p5.Name) // Diana

استخدام var ثم تعيين قيم الحقول:

var p6 Person
p6.Name = "Eve"
p6.Age = 22

جرّب بنفسك

package main

import "fmt"

func main() {
    var name, class string
    var hp int
    fmt.Scan(&name, &class, &hp)

    // TODO: قم بإنشاء player1 باستخدام تهيئة الحقول المسماة مع قيم الإدخال

    // TODO: قم بإنشاء player2 باستخدام تهيئة الحقول المسماة:
    // Name: "Guest", Class: "Novice", HitPoints: 50

    // TODO: قم بإنشاء player3 باستخدام إعلان var، ثم قم بتعيين الحقول:
    // Name: "Hero", Class: "Knight", HitPoints: 200

    fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
    fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
    fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming