Menu
Coddy logo textTech

מושג השגיאות

חלק מהיחידה יסודות במסלול ה-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), ואז נוקטים פעולה מתאימה. אם לא אירעה שגיאה, אפשר להשתמש בתוצאה בבטחה.

challenge icon

אתגר

קל

באתגר הזה תתרגל עבודה עם שגיאות ב-Go. תיצור פונקציה שמחלקת שני מספרים ומחזירה שגיאה אם מנסים לחלק באפס.

המשימה שלך:

  1. להשלים את הפונקציה divide, שמקבלת שני מספרים שלמים ומחזירה את המנה שלהם ושגיאה.
  2. אם המחלק הוא אפס, להחזיר 0 ושגיאה עם ההודעה "division by zero".
  3. אם החלוקה תקינה, להחזיר את התוצאה ואת nil עבור השגיאה.
  4. בפונקציה 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)
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Go אונליין