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. פקודות ההדפסה ב-main כבר קוראות את שדות הכתובת ישירות מתוך האדם (person.Street, person.City, person.ZipCode); הן יתקמפלו לאחר הטמעת Address.
נסו בעצמכם
package main
import "fmt"
// ה-struct Address מכיל מידע על מיקום
type Address struct {
Street string
City string
ZipCode string
}
// ה-struct Person צריך להטמיע את ה-struct Address
type Person struct {
Name string
Age int
// TODO: להטמיע כאן את ה-struct 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)
// להדפיס את שדות הכתובת ישירות מתוך המופע של Person
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 אונליין