Menu
Coddy logo textTech

Struct מוטמעים

חלק מהיחידה יסודות במסלול ה-GO של Coddy. שיעור 99 מתוך 109.

Go מאפשרת לשלב struct אחד בתוך struct אחר, וכך ליצור קשרי הרכבה. זו הגישה של 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
challenge icon

אתגר

מתחילים

באתגר הזה תתרגל שימוש במבנים משובצים (הרכבה) ב-Go.

יש לנו שני מבנים: Address ו־Person. המבנה Person צריך לשבץ בתוכו את המבנה Address, כך שאפשר יהיה לגשת ישירות לשדות הכתובת של אדם.

עליך להשלים את ההגדרה של המבנה Person כך שישבץ בתוכו את המבנה 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)
	
	// TODO: להדפיס את שדות הכתובת ישירות מהמופע של person
	// (בלי להשתמש ב-person.Address.Street וכו׳)
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Go אונליין