|
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 |
```
|