Intermediate 18 min readModule: Module 8: Explicit Error Handling Idioms
Explicit Error Handling & Error Wrapping (errors.Is)
Handle errors as values, wrap error context with fmt.Errorf('%w', err), and inspect error chains with errors.Is.
What You Will Learn in This Lesson
- Why Go treats errors as explicit values rather than hidden exceptions
- Wrapping error context with %w (fmt.Errorf('failed auth: %w', err))
- Checking wrapped errors with errors.Is() and errors.As()
Introduction & Core Concept
Go does not have try/catch exception hierarchies. Errors are simply values that implement the built-in 'error' interface (Error() string).
WHY DOES THIS MATTER IN THE REAL WORLD?
Explicit error handling forces developers to consider failure cases at every step, creating exceptionally resilient backend services.
Error Wrapping & errors.Is
gogo
123456789101112131415161718package mainimport ("errors""fmt")var ErrNotFound = errors.New("record not found")func findUser(id int) error {return fmt.Errorf("database query failed: %w", ErrNotFound)}func main() {err := findUser(404)if errors.Is(err, ErrNotFound) {fmt.Println("Handled: Specific ErrNotFound matched successfully.")}}
Line-by-Line Technical Breakdown
1Use panic/recover strictly for truly unrecoverable programmer bugs, never for expected runtime errors.
Try It Yourself (Interactive Editor)
Modify the code in real-time and click Run to test live browser output and console logs.
Intelligent Code Runner & Live Sandbox[GO]
GO SOURCE EDITOR
Interactive Live CodeIndustry Best Practices & Professional Standards
- Always wrap errors with context using fmt.Errorf('...: %w', err).
Lesson Summary & Core Takeaways
- Errors as values make failure modes clear, debuggable, and explicit.