סיכום – ספר אנשי קשר
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GO של Coddy. שיעור 18 מתוך 107.
אתגר
קלבואו נבנה מערכת לניהול אנשי קשר המשלבת טיפוסים מותאמים אישית, מבנים מקוננים, תגיות למבנים וערכי אפס: כל המושגים שלמדת בפרק הזה.
תארגן את הקוד שלך בשני קבצים:
contact.go: הגדר את מודל הנתונים של ספר אנשי הקשר שלך באמצעות טיפוסים מותאמים אישית בעלי משמעות ועיצוב JSON מתאים:- צור טיפוסים מותאמים אישית
Phoneו-Emailהמבוססים עלstring, כדי שהקוד שלך יתעד את עצמו - הגדר מבנה
Addressעם השדותStreet,Cityו-Country, שלכל אחד מהם תגית JSON מתאימה - הגדר מבנה
Contactשמכיל אתName(מחרוזת),Phone(הטיפוס Phone שלך),Email(הטיפוס Email שלך) ו-Address(מבנה מקונן). השתמש בתגיות JSON כך שהשדותphoneו-emailיושמטו כשהם ריקים
- צור טיפוסים מותאמים אישית
main.go: קרא פרטי איש קשר מהקלט, צור מופע של Contact והצג אותו כ-JSON מעוצב. ייתכן שלחלק מאנשי הקשר יהיו פרטים חסרים: תן לערכי האפס ול-omitemptyלטפל בכך בצורה תקינה.
הקלט הבא יסופק:
- שורה 1: שם איש הקשר
- שורה 2: מספר טלפון (עשוי להיות ריק)
- שורה 3: כתובת דוא"ל (עשויה להיות ריקה)
- שורה 4: כתובת רחוב
- שורה 5: עיר
- שורה 6: מדינה
השתמש ב-json.MarshalIndent עם שני רווחים להזחה. הדפס את מחרוזת ה-JSON שהתקבלה.
לדוגמה, אם מתקבל איש קשר בשם Alice Smith, ללא טלפון, עם כתובת דוא"ל alice@example.com, כתובת רחוב 123 Main St, עיר Boston ומדינה USA, הפלט שלך אמור להיראות כך:
{
"name": "Alice Smith",
"email": "alice@example.com",
"address": {
"street": "123 Main St",
"city": "Boston",
"country": "USA"
}
}שים לב שהשדה phone כלל לא מופיע, מכיוון שהוא היה ריק: זו פעולת תגית ה-omitempty!
נסו בעצמכם
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// קראו את השם
scanner.Scan()
name := scanner.Text()
// קראו את מספר הטלפון (ייתכן שיהיה ריק)
scanner.Scan()
phone := scanner.Text()
// קראו את כתובת האימייל (ייתכן שתהיה ריקה)
scanner.Scan()
email := scanner.Text()
// קראו את שם הרחוב
scanner.Scan()
street := scanner.Text()
// קראו את שם העיר
scanner.Scan()
city := scanner.Text()
// קראו את שם המדינה
scanner.Scan()
country := scanner.Text()
// TODO: צרו מופע של Contact באמצעות ערכי הקלט
// השתמשו בטיפוסים המותאמים אישית Phone ו-Email עבור השדות המתאימים
// צרו את ה-struct המקונן Address עם street, city ו-country
// TODO: השתמשו ב-json.MarshalIndent כדי להמיר את איש הקשר ל-JSON
// השתמשו ב-"" כקידומת וב-" " (שני רווחים) להזחה
// TODO: הדפיסו את מחרוזת ה-JSON
_ = name
_ = phone
_ = email
_ = street
_ = city
_ = country
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות OOP ב-Go
קבצים חיצונייםסביבת העבודה והמודולים של Goחבילות וייבואשמות מיוצאים לעומת שמות לא מיוצאיםמבוא ל-OOP ב-GoStructs כמחלקותהגדרת מתודות עבור Structsמקבלי Pointer לעומת Valueאתחול Structפונקציות Constructorחזרה – מחשבון פשוט4ממשקים
מבוא לממשקיםמימוש משתמעממשק כחוזהממשק ריק (any)אימות טיפוסמתג טיפוסיםהרכבת ממשקיםממשקי Stringer ו-Errorסיכום – מחשבון צורות7כימוס
שדות מיוצאים לעומת שדות לא מיוצאיםכימוס ברמת החבילהמתודות Getter ו-Setterהסתרת מידע ב-Goסיכום – רשומות תלמידים10Generics (Go 1.18 ומעלה)
מבוא ל־Genericsפרמטרים של טיפוסיםאילוצי טיפוסיםמבנים גנרייםפתרון עוקף למתודות גנריותסיכום – אוסף גנרי2העמקה בסוגים וב-Structs
סוגים בסיסיים ומורכביםהגדרות של סוגים מותאמים אישיתתגיות StructStructs אנונימייםStructs מקונניםערכי אפס וברירות מחדלסיכום – ספר אנשי קשר5קומפוזיציה במקום ירושה
למה ב-Go אין ירושהיסודות הטמעת Structקידום מתודותהטמעת כמה Structsהטמעה לעומת אגרגציההסתרת מתודות מוטמעותסיכום – היררכיית עובדים8טיפול בשגיאות ו-OOP
ממשק errorסוגי שגיאות מותאמים אישיתעטיפת שגיאות (fmt.Errorf)שגיאות Sentinelerrors.Is() ו-errors.As()Panic, Defer ו-Recoverסיכום – מנתח קבצים11ספרייה סטנדרטית ותכנות מונחה עצמים
io.Reader ו-io.Writersort.Interfaceהממשק fmt.Stringerencoding/json עם מבניםהממשק http.Handlerסיכום – מודלים של REST API3מצביעים וזיכרון
יסודות המצביעים ב-Goמצביעים למבניםהעברה לפי ערך לעומת לפי הפניההפונקציה new()איסוף אשפה ב-Goסיכום - בונה רשימה מקושרת6פולימורפיזם ב-Go
פולימורפיזם באמצעות ממשקיםטיפוס ברווז ב-Goכללי התאמה לממשקאוספים פולימורפייםהזרקת תלויותסיכום - מעבד תשלומים9מקביליות ו-OOP
יסודות GoroutinesChannels ותקשורתChannel עם חוצץ לעומת ללא חוצץפקודת Selectsync.Mutex ו-sync.RWMutexsync.WaitGroupתכנון Struct בטוח לשימוש במקבילסיכום - מאגר עובדים12מושגים מתקדמים בתכנות מונחה עצמים
דפוס האפשרויות הפונקציונליותדפוס Builder ב-Goשרשור מתודותכינויי טיפוסים לעומת הגדרותיסודות Reflectionסקירה כללית של יצירת קודתרגלו בעצמכם: קומפיילר Go אונליין