טיפול בסיסי בשגיאות
חלק מהיחידה יסודות במסלול ה-GO של Coddy. שיעור 108 מתוך 109.
טיפול בסיסי בשגיאות הוא דפוס יסודי ב-Go, שבו בודקים אם אירעו שגיאות לאחר פעולות שעלולות להיכשל.
נלמד איך לטפל בשגיאות ב-Go באמצעות יצירת פונקציית חילוק פשוטה שמחזירה שגיאה כשמחלקים באפס:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}הפונקציה הזאת מחזירה שני ערכים: תוצאת החילוק ושגיאה. אם המחלק הוא אפס, היא מחזירה הודעת שגיאה במקום לנסות לבצע את החילוק.
עכשיו נראה איך להשתמש בפונקציה הזאת ולטפל בכל שגיאה אפשרית:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error occurred:", err)
return // עצור את הביצוע או טפל בשגיאה
}
fmt.Println("Result:", result)לאחר הרצת הקוד הזה, נבדוק אם אירעה שגיאה באמצעות התנאי if err != nil. מכיוון שניסינו לחלק באפס, הפונקציה מחזירה שגיאה, והטקסט הבא יוצג על המסך:
Error occurred: division by zeroהתבנית הזאת, שבה מחזירים שגיאה כערך ההחזרה האחרון ובודקים אותה מיד, נפוצה מאוד ב-Go. היא מאפשרת לתוכנית שלך לטפל בכשלים בצורה מסודרת במקום לקרוס.
אתגר
קלבאתגר הזה תתרגל טיפול בסיסי בשגיאות ב-Go. יש לך פונקציה שמחלקת שני מספרים, אבל חלוקה באפס גורמת לשגיאת זמן ריצה. המשימה שלך היא להוסיף טיפול בשגיאות כדי למנוע את הקריסה הזאת.
בקוד כבר קיימת פונקציה שמחזירה גם תוצאה וגם שגיאה. עליך לבדוק אם יש שגיאה לפני השימוש בתוצאה.
נסו בעצמכם
package main
import (
"errors"
"fmt"
)
// הפונקציה הזו מחלקת את x ב-y ומחזירה שגיאה אם y הוא אפס
func divide(x, y float64) (float64, error) {
if y == 0 {
return 0, errors.New("cannot divide by zero")
}
return x / y, nil
}
func main() {
// ערכי בדיקה
numerator := 10.0
denominator := 0.0
// קראו לפונקציה divide
result, err := divide(numerator, denominator)
// TODO: בדקו אם err אינו nil (יש שגיאה)
// אם יש שגיאה, הדפיסו אותה באמצעות fmt.Println(err)
// אחרת, הדפיסו את התוצאה באמצעות fmt.Printf("Result: %.2f\n", result)
// הסירו את השורה הזו וממשו למעלה טיפול תקין בשגיאות
fmt.Printf("Result: %.2f\n", result)
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורי השוואה ולוגיקה
אופרטורי השוואה – חלק 1אופרטורי השוואה – חלק 2אופרטור AND לוגיאופרטור OR לוגיאופרטור NOT לוגייסודות קדימות אופרטוריםסיכום – ביצוע השוואות7זרימת בקרה: לולאות
הסבר על לולאת `for`לולאת `for` – בסיסיתלולאת `for` – תנאי בלבדמילת המפתח `break`מילת המפתח `continue`לולאות מקוננותסיכום – חזרה על פעולות2משתנים וסוגי נתונים בסיסיים
מהו משתנההסקת טיפוס באמצעות `:=`מספרים שלמים (int)מספרים בנקודה צפהערכים בוליאנייםמחרוזותערכי אפסקבועיםמוסכמות לשמותסיכום – משתנים וטיפוסים8פונקציות
הבנת פונקציותהצהרה על פונקציהקריאה לפונקציותפרמטרים של פונקציההחזרת ערך יחידהחזרת מספר ערכיםערכי החזרה בעלי שםיסודות תחום ההשפעה של פונקציהסיכום - יצירת קוד לשימוש חוזר11טיפוסים מורכבים: Slices
מבוא ל-Slicesהצהרת Literals של Sliceיצירת Slices באמצעות `make`אורך Slice לעומת קיבולתגישה לאיברים ב-Sliceהוספת איבריםחיתוך Slices/מערכים קיימיםמעבר על Slicesהעתקת Slicesסיכום – רשימות דינמיות14טיפול בסיסי בשגיאות
מושג השגיאותהממשק `error`פונקציות שמחזירות שגיאותבדיקת שגיאותיצירת שגיאות פשוטותיצירת שגיאות עם עיצובטיפול בסיסי בשגיאותסיכום – טיפול בבעיות3אופרטורים בסיסיים
אופרטורים אריתמטייםאופרטור חילוקאופרטור מודולואופרטור השמהאופרטורי השמה מורחבתהגדלה והקטנהסיכום – חישובים6זרימת בקרה: תנאים
פקודת `if`מילת המפתח `else`מילת המפתח `else if`הסתרת משתנים בתוך `if`אתחול משתניםפקודת `switch``switch` עם ביטויים`switch` ללא ביטוימילת המפתח `fallthrough`סיכום - קבלת החלטותתרגלו בעצמכם: קומפיילר Go אונליין