Sobes.tech
Junior — Middle

Come vengono gestite le eccezioni e gli errori nella tua applicazione?

sobes.tech AI

Risposta dell'AI

In Go, la gestione degli errori differisce da molti altri linguaggi, poiché qui non ci sono eccezioni nel senso tradizionale. Invece, le funzioni restituiscono di solito un valore di errore (error) come secondo risultato.

Approcci principali:

  • Controllo dell'errore dopo aver chiamato una funzione:

    result, err := someFunction()
    if err != nil {
        // gestione dell'errore
        log.Println("Errore:", err)
        return err
    }
    // continuare con result
    
  • Creazione di tipi di errore personalizzati usando errors.New o fmt.Errorf per messaggi più informativi.

  • Panic (panic) e recupero (recover) sono usati raramente, principalmente per error critici che non dovrebbero verificarsi nel flusso normale.

  • Registrazione degli errori e restituzione verso l'alto nello stack per una gestione centralizzata.

Esempio di gestione degli errori:

package main

import (
    "errors"
    "fmt"
)

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("divisione per zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Errore:", err)
        return
    }
    fmt.Println("Risultato:", result)
}

In questo modo, in Go, gli errori vengono gestiti esplicitamente, il che aumenta la leggibilità e l'affidabilità del codice.