panic — immediate runtime failure. error — expected failure.
Panic:
1func Must(s string) Config {2 cfg, err := Parse(s)3 if err != nil {4 panic("invalid: " + err.Error())5 }6 return cfg7}
Error:
1func read(path string) ([]byte, error) {2 data, err := os.ReadFile(path)3 if err != nil {4 return nil, fmt.Errorf("reading %s: %w", path, err)5 }6 return data, nil7}
When to use panic:
init() failures.When to use error:
Common mistakes:
errors.Is/errors.As.log.Fatal instead of error.