Go

Sentinel Errors (var ErrFoo = errors.New)

admin by @admin ADMIN
5d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Sentinel errors are package-level singletons you can compare against with `errors.Is`. Use sparingly — they're part of your package's API surface and changing them is a breaking change.
Go
Raw
package main

import (
    "errors"
    "fmt"
)

// Exported sentinels — callers compare via errors.Is
var (
    ErrNotFound      = errors.New("not found")
    ErrAlreadyExists = errors.New("already exists")
    ErrUnauthorized  = errors.New("unauthorized")
)

func getUser(id int) (string, error) {
    if id == 42 {
        return "Alice", nil
    }
    return "", fmt.Errorf("getUser id=%d: %w", id, ErrNotFound)
}

func main() {
    if _, err := getUser(99); err != nil {
        fmt.Println(err)                                 // getUser id=99: not found
        if errors.Is(err, ErrNotFound) {
            fmt.Println("→ matched ErrNotFound")
        }
    }
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.