Bird
Raised Fist0
Goprogramming~5 mins

Handling errors in Go - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the common way to handle errors in Go?
In Go, errors are handled by returning an error value from functions. You check if the error is not nil to see if something went wrong.
Click to reveal answer
beginner
What does the error type represent in Go?
The error type is an interface in Go that represents an error condition with a single method Error() that returns a string describing the error.
Click to reveal answer
beginner
How do you check if a function returned an error in Go?
You check if the returned error variable is not nil. If it is not nil, an error occurred and you can handle it accordingly.
Click to reveal answer
intermediate
What is the purpose of the defer statement in error handling?
defer schedules a function call to run after the current function finishes. It is often used to clean up resources even if an error occurs.
Click to reveal answer
intermediate
How can you create a custom error in Go?
You can create a custom error by using the errors.New() function or by defining a type that implements the error interface with an Error() method.
Click to reveal answer
In Go, what does a function usually return to indicate an error?
AA string message
BA boolean true or false
CAn error value of type error
DA panic
What should you check after calling a function that returns an error?
AIf the error is zero
BIf the error is nil
CIf the error is empty string
DIf the error is true
Which Go statement helps ensure cleanup code runs even if an error occurs?
Adefer
Bgoto
Cpanic
Dreturn
How do you create a simple custom error message in Go?
AUsing return nil
BUsing fmt.Println("message")
CUsing panic("message")
DUsing errors.New("message")
What does the Error() method return in a custom error type?
AA string describing the error
BAn integer error code
CA boolean value
DNothing
Explain how error handling works in Go and why it is important to check errors after function calls.
Think about how Go functions return errors and what happens if you ignore them.
You got /4 concepts.
    Describe how you can create and use a custom error type in Go.
    Consider both simple and advanced ways to make your own error messages.
    You got /4 concepts.

      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

      1. 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.
      2. 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.
      3. Final Answer:

        By checking if the error variable is not nil -> Option D
      4. 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

      1. Step 1: Declare error variable correctly

        Use short variable declaration with := to assign the error returned by doTask() to err.
      2. Step 2: Check if error is not nil

        Use if err != nil to check if an error occurred and handle it inside the block.
      3. Final Answer:

        err := doTask() if err != nil { // handle error } -> Option B
      4. 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

      1. Step 1: Analyze divide function behavior

        If b is zero, divide returns 0 and an error with message "division by zero".
      2. 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.
      3. Final Answer:

        division by zero -> Option A
      4. Quick Check:

        Error message prints when err != nil [OK]
      Hint: If error returned, print error message, not result [OK]
      Common Mistakes:
      • Assuming result prints even if error exists
      • Ignoring error check and printing zero
      • Expecting runtime panic instead of error
      4. Identify the error in this Go code snippet:
      package main
      import (
          "fmt"
          "os"
      )
      func readFile() error {
          file, err := os.Open("data.txt")
          if err != nil {
              return err
          }
          defer file.Close()
          // read file contents
          return nil
      }
      
      func main() {
          err := readFile()
          if err != nil {
              fmt.Println("File read successfully")
          }
      }
      medium
      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

      1. Step 1: Examine the error handling in main

        The main function calls readFile() and prints "File read successfully" if err != nil.
      2. 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).
      3. Final Answer:

        The error check in main should be err == nil, not err != nil -> Option A
      4. 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

      1. Step 1: Understand error wrapping in Go

        Go 1.13+ supports wrapping errors with fmt.Errorf and %w verb to keep original error context.
      2. 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.
      3. 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
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard