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אתגר
מתחיליםבאתגר הזה תתרגל שימוש במבנים משובצים (הרכבה) ב-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)
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורי השוואה ולוגיקה
אופרטורי השוואה – חלק 1אופרטורי השוואה – חלק 2אופרטור AND לוגיאופרטור OR לוגיאופרטור NOT לוגייסודות קדימות אופרטוריםסיכום – ביצוע השוואות7זרימת בקרה: לולאות
הסבר על לולאת `for`לולאת `for` – בסיסיתלולאת `for` – תנאי בלבדמילת המפתח `break`מילת המפתח `continue`לולאות מקוננותסיכום – חזרה על פעולות10טיפוסים מורכבים: מערכים
מבוא למערכיםהכרזה על מערכיםאתחול מערכיםגישה לאיברי מערךאורך מערך באמצעות `len`מעבר על מערכיםמערכים רב-ממדיים13טיפוסים מורכבים: Structs
הגדרת טיפוסים מותאמים אישיתיצירת מופעי Structגישה לשדות של Structמצביעים ל-Structאתחול StructStruct מוטמעיםStruct אנונימייםסיכום – מבני נתונים מותאמים אישית2משתנים וסוגי נתונים בסיסיים
מהו משתנההסקת טיפוס באמצעות `:=`מספרים שלמים (int)מספרים בנקודה צפהערכים בוליאנייםמחרוזותערכי אפסקבועיםמוסכמות לשמותסיכום – משתנים וטיפוסים8פונקציות
הבנת פונקציותהצהרה על פונקציהקריאה לפונקציותפרמטרים של פונקציההחזרת ערך יחידהחזרת מספר ערכיםערכי החזרה בעלי שםיסודות תחום ההשפעה של פונקציהסיכום - יצירת קוד לשימוש חוזר3אופרטורים בסיסיים
אופרטורים אריתמטייםאופרטור חילוקאופרטור מודולואופרטור השמהאופרטורי השמה מורחבתהגדלה והקטנהסיכום – חישובים6זרימת בקרה: תנאים
פקודת `if`מילת המפתח `else`מילת המפתח `else if`הסתרת משתנים בתוך `if`אתחול משתניםפקודת `switch``switch` עם ביטויים`switch` ללא ביטוימילת המפתח `fallthrough`סיכום - קבלת החלטותתרגלו בעצמכם: קומפיילר Go אונליין