Blame docs/errors.md

Packit Service 4d2de5
# Error Handling
Packit Service 4d2de5
Packit Service 4d2de5
## When to Panic
Packit Service 4d2de5
Packit Service 4d2de5
Always use `panic` for errors that can only happen when other code in
Packit Service 4d2de5
*osbuild-composer* is wrong (also know as *programmer error*). This way, we
Packit Service 4d2de5
catch these kinds of errors in unit tests while developing.
Packit Service 4d2de5
Packit Service 4d2de5
Since only developers interact with these errors, a stacktrace including the
Packit Service 4d2de5
error is all that's necessary. Don't include an additional message.
Packit Service 4d2de5
Packit Service 4d2de5
For example, Go's `json.Marshal` can fail when receiving values that cannot be
Packit Service 4d2de5
marshaled. However, when passing a known struct, we know it cannot fail:
Packit Service 4d2de5
Packit Service 4d2de5
```golang
Packit Service 4d2de5
bytes, err := json.Marshal();
Packit Service 4d2de5
if err != nil {
Packit Service 4d2de5
        panic(err)
Packit Service 4d2de5
}
Packit Service 4d2de5
```
Packit Service 4d2de5
Packit Service 4d2de5
Some packages have functions prefixed with `Must`, which `panic()` on error.
Packit Service 4d2de5
Use these when possible to save the error check:
Packit Service 4d2de5
Packit Service 4d2de5
```golang
Packit Service 4d2de5
re := regexp.MustCompile("v[0-9]")
Packit Service 4d2de5
```