errNotFound

simple:

package main

import (
    "fmt"

    stderrors "errors"
    "github.com/pkg/errors"
)

func findSomething() error {
    return errors.Errorf("something not found")
}

func main() {
    err := findSomething()
    // can print error stack
    exitf("Error1: %+v", err)

    fmt.Println()
    fmt.Println()
    // cannot print error stack
    err = ErrNotFound(err)
    exitf("Error2: %+v", err)
}

func exitf(format string, args ...interface{}) {
    fmt.Printf(format, args...)

    //os.Exit(1)
}

type errNotFound struct{ error }

func ErrNotFound(err error) error {
    if err == nil || IsErrNotFound(err) {
        return err
    }

    return errNotFound{err}
}

func IsErrNotFound(err error) bool {
    return stderrors.As(err, &errNotFound{})
}

output:

$ go run main
Error1: something not found
main.findSomething
        /home/lianxm/github.com/play_error/main.go:11
main.main
        /home/lianxm/github.com/play_error/main.go:15
runtime.main
        /usr/local/go/src/runtime/proc.go:255
runtime.goexit
        /usr/local/go/src/runtime/asm_amd64.s:1581

Error2: something not found
err = errors.Unwrap(err)

下面是一个示例项目:https://github.com/lianxmfor/play_error