Bird
Raised Fist0
Goprogramming~5 mins

Error interface in Go

Choose your learning style10 modes available
Introduction

The Error interface in Go helps programs tell when something went wrong. It gives a simple way to share error messages.

When a function might fail and you want to tell the caller what happened.
When you want to check if a problem occurred before continuing.
When you want to return a clear message about an issue in your code.
When you want to handle different errors differently in your program.
Syntax
Go
type error interface {
    Error() string
}

The Error interface has one method: Error() which returns a string message.

Any type that has this method is an error and can be used as one.

Examples
Create a new error with a message using the errors.New function.
Go
var err error = errors.New("file not found")
Return an error if dividing by zero, otherwise return the result and no error (nil).
Go
func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("cannot divide by zero")
    }
    return a / b, nil
}
Sample Program

This program checks if a person is old enough. If not, it returns an error with a message. The main function prints the error message.

Go
package main

import (
    "errors"
    "fmt"
)

func checkAge(age int) error {
    if age < 18 {
        return errors.New("age must be at least 18")
    }
    return nil
}

func main() {
    age := 16
    if err := checkAge(age); err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Age is fine")
    }
}
OutputSuccess
Important Notes

Always check if the error is nil before using the result from a function.

You can create your own error types by making a struct that implements the Error() method.

Summary

The Error interface has one method Error() that returns a message.

Functions return errors to show problems.

Check errors before using results to avoid bugs.

Practice

(1/5)
1.

What does the Error() method in Go's error interface return?

easy
A. A boolean indicating success or failure
B. An integer error code
C. A string describing the error message
D. A pointer to the error object

Solution

  1. Step 1: Understand the error interface

    The error interface in Go defines a single method Error() that returns a string.
  2. Step 2: Identify the return type of Error()

    The Error() method returns a string that describes the error message.
  3. Final Answer:

    A string describing the error message -> Option C
  4. Quick Check:

    Error() returns string message [OK]
Hint: Error() always returns a string message describing the problem [OK]
Common Mistakes:
  • Thinking Error() returns an integer code
  • Assuming Error() returns a boolean
  • Confusing Error() with returning an error object pointer
2.

Which of the following is the correct way to declare a function in Go that returns an error?

func doSomething() ???
easy
A. func doSomething() error
B. func doSomething() string
C. func doSomething() (int, error)
D. func doSomething() *error

Solution

  1. Step 1: Recall function return types for errors

    In Go, functions that can fail often return an error type as the last return value.
  2. Step 2: Check the syntax for returning only an error

    The correct syntax for a function returning only an error is func doSomething() error.
  3. Final Answer:

    func doSomething() error -> Option A
  4. Quick Check:

    Function returns error type only [OK]
Hint: Use 'error' as return type to indicate possible failure [OK]
Common Mistakes:
  • Returning *error instead of error
  • Returning string instead of error
  • Returning multiple values without parentheses
3.

What will be the output of the following Go program?

package main
import (
	"errors"
	"fmt"
)
func main() {
	err := errors.New("file not found")
	if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("No error")
	}
}
medium
A. file not found
B. No error
C. nil
D. Compilation error

Solution

  1. Step 1: Understand errors.New usage

    The errors.New function creates a new error with the message "file not found".
  2. Step 2: Check the if condition and output

    Since err is not nil, the program prints err.Error(), which is the string "file not found".
  3. Final Answer:

    file not found -> Option A
  4. Quick Check:

    Non-nil error prints message [OK]
Hint: errors.New creates error with message; err != nil prints message [OK]
Common Mistakes:
  • Expecting 'No error' output
  • Thinking err is nil after errors.New
  • Confusing err.Error() with err itself
4.

Identify the error in this Go code snippet:

func check() error {
	var err error
	if err != nil {
		return err
	}
	return nil
}
medium
A. Missing parentheses in if condition
B. Variable err is never assigned, so err != nil is always false
C. Function must return a string, not error
D. Cannot return nil from a function returning error

Solution

  1. Step 1: Analyze variable initialization

    The variable err is declared but never assigned a value, so it defaults to nil.
  2. Step 2: Evaluate the if condition

    Since err is nil, the condition err != nil is false, so the return inside if never runs.
  3. Final Answer:

    Variable err is never assigned, so err != nil is always false -> Option B
  4. Quick Check:

    Unassigned error variable is nil [OK]
Hint: Uninitialized error is nil, so err != nil is false [OK]
Common Mistakes:
  • Assuming err is non-nil by default
  • Thinking function must return string
  • Confusing nil return with error
5.

Given this Go function that returns an error, how can you modify it to wrap the original error with additional context?

func readFile() error {
	return errors.New("file missing")
}

Choose the best way to add context "readFile failed:" before the original error message.

hard
A. return fmt.Errorf("readFile failed: %v", errors.New("file missing"))
B. return errors.New("readFile failed: file missing")
C. return errors.Wrap(errors.New("file missing"), "readFile failed")
D. return fmt.Errorf("readFile failed: %w", errors.New("file missing"))

Solution

  1. Step 1: Understand error wrapping in Go

    Go 1.13+ supports error wrapping using fmt.Errorf with the %w verb to wrap an error with context.
  2. Step 2: Check options for wrapping

    return fmt.Errorf("readFile failed: %w", errors.New("file missing")) uses fmt.Errorf("readFile failed: %w", errors.New("file missing")), which correctly wraps the original error with context.
  3. Step 3: Identify incorrect options

    return errors.New("readFile failed: file missing") creates a new error string but does not wrap the original error. return errors.Wrap(errors.New("file missing"), "readFile failed") uses errors.Wrap which is not in standard Go. return fmt.Errorf("readFile failed: %v", errors.New("file missing")) uses %v which formats but does not wrap the error.
  4. Final Answer:

    return fmt.Errorf("readFile failed: %w", errors.New("file missing")) -> Option D
  5. Quick Check:

    Use fmt.Errorf with %w to wrap errors [OK]
Hint: Use fmt.Errorf with %w to wrap errors and add context [OK]
Common Mistakes:
  • Using %v instead of %w for wrapping
  • Creating new error string without wrapping
  • Using non-standard errors.Wrap function
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