📖 Scenario: You are writing a small program that divides numbers. Sometimes, the divisor might be zero, which causes an error. You want to handle this error properly so the program does not crash and shows a friendly message.
🎯 Goal: Build a Go program that divides two numbers and handles the error when dividing by zero.
📋 What You'll Learn
Create two variables for dividend and divisor
Create a function that divides two numbers and returns an error if divisor is zero
Call the function and handle the error using an if statement
Print the result if no error, or print the error message
💡 Why This Matters
🌍 Real World
Handling errors is important in real programs to avoid crashes and provide clear messages to users.
💼 Career
Error handling is a fundamental skill for software developers to write reliable and user-friendly applications.
Progress0 / 4 steps
1
Create variables for dividend and divisor
Create two variables called dividend and divisor with values 10 and 0 respectively.
Go
Hint
Use var keyword to declare variables with their types and values.
2
Create a divide function that returns error
Create a function called divide that takes two int parameters named a and b. It returns two values: int and error. If b is zero, return zero and an error created with fmt.Errorf("cannot divide by zero"). Otherwise, return the division result and nil error.
Go
Hint
Use fmt.Errorf to create an error message.
3
Call divide function and handle error
In main, call divide(dividend, divisor) and assign the results to variables result and err. Use an if statement to check if err is not nil. If so, print the error message using fmt.Println(err). Otherwise, print the result using fmt.Println(result).
Go
Hint
Use if err != nil to check for errors.
4
Print the final output
Run the program and observe the output. It should print the error message cannot divide by zero because the divisor is zero.
Go
Hint
The program should print the error message because dividing by zero is not allowed.
Practice
(1/5)
1. In Go, how do you check if a function returned an error?
easy
A. By checking if the error variable is zero
B. By checking if the error variable is an empty string
C. By checking if the error variable equals false
D. By checking if the error variable is not nil
Solution
Step 1: Understand error type in Go
Errors in Go are values, and when a function returns an error, it returns a value of type error or nil if no error occurred.
Step 2: Check error value
To know if an error happened, you check if the error variable is not nil, meaning an error value exists.
Final Answer:
By checking if the error variable is not nil -> Option D
Quick Check:
error != nil = true means error occurred [OK]
Hint: Always check if error != nil to detect errors [OK]
Common Mistakes:
Checking error == 0 instead of error != nil
Assuming error is a boolean
Comparing error to empty string
2. Which of the following is the correct way to declare and check an error returned by a function doTask() in Go?
easy
A. error := doTask()
if error != false {
// handle error
}
B. err := doTask()
if err != nil {
// handle error
}
C. err := doTask()
if err == 0 {
// handle error
}
D. var err doTask()
if err == nil {
// handle error
}
Solution
Step 1: Declare error variable correctly
Use short variable declaration with := to assign the error returned by doTask() to err.
Step 2: Check if error is not nil
Use if err != nil to check if an error occurred and handle it inside the block.
Final Answer:
err := doTask()
if err != nil {
// handle error
} -> Option B
Quick Check:
Use := and err != nil for error handling [OK]
Hint: Use err := func() and check err != nil [OK]
Common Mistakes:
Using wrong variable declaration syntax
Checking error against 0 or false
Using reserved word 'error' as variable name
3. What will be the output of this Go code?
package main
import (
"errors"
"fmt"
)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
medium
A. division by zero
B. 0
C. 10
D. runtime error
Solution
Step 1: Analyze divide function behavior
If b is zero, divide returns 0 and an error with message "division by zero".
Step 2: Check main function output
Since divide(10, 0) returns an error, err != nil is true, so fmt.Println(err) prints the error message.
Final Answer:
division by zero -> Option A
Quick Check:
Error message prints when err != nil [OK]
Hint: If error returned, print error message, not result [OK]
A. The error check in main should be err == nil, not err != nil
B. The defer statement is misplaced and should be before error check
C. The function readFile should return a string, not error
D. os.Open does not return an error
Solution
Step 1: Examine the error handling in main
The main function calls readFile() and prints "File read successfully" if err != nil.
Step 2: Identify the logic error
err != nil means an error occurred, so printing success here is incorrect. Success should be printed only if err == nil (no error).
Final Answer:
The error check in main should be err == nil, not err != nil -> Option A
Quick Check:
Print success only if err == nil [OK]
Hint: Print success only when err == nil, not err != nil [OK]
Common Mistakes:
Confusing err == nil and err != nil conditions
Moving defer before error check incorrectly
Expecting os.Open to never return error
5. You want to write a Go function that tries to open a file and returns a custom error message if it fails. Which code snippet correctly wraps the original error with a custom message using Go's standard library?
hard
A. file, err := os.Open("config.json")
if err != nil {
panic(err)
}
return file.Close()
B. file, err := os.Open("config.json")
if err != nil {
return errors.New("failed to open config")
}
return file.Close()
C. file, err := os.Open("config.json")
if err != nil {
return fmt.Errorf("failed to open config: %w", err)
}
return file.Close()
D. file, err := os.Open("config.json")
if err != nil {
return err.Error()
}
return file.Close()
Solution
Step 1: Understand error wrapping in Go
Go 1.13+ supports wrapping errors with fmt.Errorf and %w verb to keep original error context.
Step 2: Check each option for correct wrapping
file, err := os.Open("config.json")
if err != nil {
return fmt.Errorf("failed to open config: %w", err)
}
return file.Close() uses fmt.Errorf with %w to wrap original error, preserving it. file, err := os.Open("config.json")
if err != nil {
return errors.New("failed to open config")
}
return file.Close() creates new error losing original error. file, err := os.Open("config.json")
if err != nil {
panic(err)
}
return file.Close() panics instead of returning error. file, err := os.Open("config.json")
if err != nil {
return err.Error()
}
return file.Close() returns string instead of error type.
Final Answer:
file, err := os.Open("config.json")
if err != nil {
return fmt.Errorf("failed to open config: %w", err)
}
return file.Close() -> Option C
Quick Check:
Use fmt.Errorf with %w to wrap errors [OK]
Hint: Use fmt.Errorf("%w") to wrap errors with context [OK]
Common Mistakes:
Replacing original error instead of wrapping
Using panic instead of returning error
Returning error message string instead of error type
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.