Muster für die Fehlerbehandlung
Grundlagen der Fehlerbehandlung
Golang bietet mehrere Strategien für eine robuste Fehlerverwaltung:
graph TD
A[Error Handling] --> B[Explicit Error Checking]
A --> C[Error Wrapping]
A --> D[Panic and Recover]
A --> E[Custom Error Types]
Grundlegendes Muster für die Fehlerprüfung
func processData(data string) error {
if data == "" {
return fmt.Errorf("invalid data input")
}
return nil
}
func main() {
err := processData("")
if err!= nil {
fmt.Println("Error occurred:", err)
os.Exit(1)
}
}
Fehlerumhüllung (Error Wrapping) und Kontext
func validateConfig(path string) error {
if _, err := os.Stat(path); os.IsNotExist(err) {
return fmt.Errorf("config file not found: %w", err)
}
return nil
}
Vergleich von Fehlertypen
Muster |
Anwendungsfall |
Komplexität |
Einfache Fehlerprüfung |
Grundlegende Fehlerszenarien |
Niedrig |
Fehlerumhüllung |
Hinzufügen von Kontext zu Fehlern |
Mittel |
Benutzerdefinierte Fehlertypen |
Spezialisierte Fehlerbehandlung |
Hoch |
Muster für Panik und Wiederherstellung (Panic and Recover)
func recoverFromPanic() {
defer func() {
if r := recover(); r!= nil {
fmt.Println("Recovered from panic:", r)
os.Exit(1)
}
}()
// Simulated critical section
panic("unexpected error")
}
Fortgeschrittene Fehlerbehandlung
type CustomError struct {
Code int
Message string
}
func (e *CustomError) Error() string {
return fmt.Sprintf("Error %d: %s", e.Code, e.Message)
}
func validateInput(input string) error {
if len(input) == 0 {
return &CustomError{
Code: 100,
Message: "Empty input not allowed",
}
}
return nil
}
Best Practices
- Behandeln Sie immer Fehler explizit.
- Geben Sie sinnvolle Fehlermeldungen an.
- Verwenden Sie Fehlerumhüllung für zusätzlichen Kontext.
- Vermeiden Sie das stumme Unterdrücken von Fehlern.
- Protokollieren Sie Fehler zur Fehlersuche.
LabEx empfiehlt, eine konsistente Strategie für die Fehlerbehandlung zu entwickeln, die Einfachheit und umfassende Fehlerverwaltung in Golang-Anwendungen ausbalanciert.