מושג השגיאות
חלק מהיחידה יסודות במסלול ה-GO של Coddy. שיעור 102 מתוך 109.
ב-Go, שגיאות הן ערכים שמציינים שמשהו השתבש. Go מטפלת בשגיאות באופן מפורש במקום להשתמש בחריגות.
בואו ניצור פונקציה שעלולה להפיק שגיאה בעת חלוקת מספרים:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}הפונקציה הזאת מחזירה שני ערכים: תוצאת החלוקה ושגיאה אפשרית. אם המחלק הוא אפס, אנחנו מחזירים הודעת שגיאה במקום לנסות לבצע את החלוקה.
כעת, נשתמש בפונקציה שלנו ונטפל בשגיאות אפשריות:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}לאחר שנריץ את הקוד הזה, נראה הודעת שגיאה על המסך כי ניסינו לחלק באפס:
Error: cannot divide by zeroזה מדגים את דפוס הטיפול בשגיאות של Go: בודקים אם אירעה שגיאה (err != nil), ואז נוקטים פעולה מתאימה. אם לא אירעה שגיאה, אפשר להשתמש בתוצאה בבטחה.
אתגר
קלבאתגר הזה תתרגל עבודה עם שגיאות ב-Go. תיצור פונקציה שמחלקת שני מספרים ומחזירה שגיאה אם מנסים לחלק באפס.
המשימה שלך:
- להשלים את הפונקציה
divide, שמקבלת שני מספרים שלמים ומחזירה את המנה שלהם ושגיאה. - אם המחלק הוא אפס, להחזיר 0 ושגיאה עם ההודעה "division by zero".
- אם החלוקה תקינה, להחזיר את התוצאה ואת
nilעבור השגיאה. - בפונקציה
main, לקרוא ל-divideעם הערכים שסופקו ולטפל בשגיאות כלשהן באופן מתאים.
התרגיל הזה מדגים כיצד פונקציות ב-Go מחזירות בדרך כלל תוצאה ושגיאה, וכיצד לבדוק את השגיאות האלה ולטפל בהן.
נסו בעצמכם
package main
import (
"errors"
"fmt"
)
// הפונקציה divide מחלקת את a ב-b ומחזירה את התוצאה
// אם b הוא 0, היא מחזירה שגיאה
func divide(a, b int) (int, error) {
// TODO: לממש את הפונקציה divide
// אם b הוא 0, יש להחזיר 0 ושגיאה עם ההודעה "division by zero"
// אחרת, יש להחזיר a/b ואת nil עבור השגיאה
}
func main() {
// מקרה הבדיקה הראשון
a, b := 10, 2
result, err := divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\n", result)
}
// מקרה הבדיקה השני
a, b = 8, 0
result, err = divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\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 אונליין