Gestione di base degli errori
Fa parte della sezione Fondamenti del percorso GO di Coddy. Lezione 108 di 109.
Gestione di base degli errori è uno schema fondamentale in Go, in cui controlli la presenza di errori dopo le operazioni che potrebbero fallire.
Impariamo a gestire gli errori in Go creando una semplice funzione di divisione che restituisce un errore quando si divide per zero:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}Questa funzione restituisce due valori: il risultato della divisione e un errore. Se il divisore è zero, restituisce un messaggio di errore invece di tentare la divisione.
Ora vediamo come usare questa funzione e gestire eventuali errori:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error occurred:", err)
return // Interrompi l'esecuzione o gestisci l'errore
}
fmt.Println("Result:", result)Dopo aver eseguito questo codice, verifichiamo se si è verificato un errore usando la condizione if err != nil. Poiché abbiamo provato a dividere per zero, la funzione restituisce un errore e sullo schermo verrà visualizzato quanto segue:
Error occurred: division by zeroQuesto schema, che consiste nel restituire un errore come ultimo valore restituito e verificarlo immediatamente, è molto comune in Go. Permette al tuo programma di gestire gli errori senza bloccarsi.
Sfida
FacileIn questa sfida, farai pratica con la gestione di base degli errori in Go. Hai una funzione che divide due numeri, ma la divisione per zero causa un errore di runtime. Il tuo compito è aggiungere la gestione degli errori per evitare questo arresto anomalo.
Il codice ha già una funzione che restituisce sia un risultato sia un errore. Devi controllare se c'è un errore prima di usare il risultato.
Provalo tu
package main
import (
"errors"
"fmt"
)
// Questa funzione divide x per y e restituisce un errore se y è zero
func divide(x, y float64) (float64, error) {
if y == 0 {
return 0, errors.New("cannot divide by zero")
}
return x / y, nil
}
func main() {
// Valori di prova
numerator := 10.0
denominator := 0.0
// Chiama la funzione divide
result, err := divide(numerator, denominator)
// TODO: Controlla se err non è nil (è presente un errore)
// Se è presente un errore, stampalo usando fmt.Println(err)
// Altrimenti, stampa il risultato usando fmt.Printf("Result: %.2f\n", result)
// Rimuovi questa riga e implementa qui sopra una corretta gestione degli errori
fmt.Printf("Result: %.2f\n", result)
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Operatori di confronto e logici
Operatori di confronto - Parte 1Operatori di confronto - Parte 2Operatore AND logicoOperatore OR logicoOperatore NOT logicoNozioni di base sulla precedenza degli operatoriRiepilogo - Eseguire confronti7Flusso di controllo: cicli
Come funziona il ciclo `for`Ciclo `for` - baseCiclo `for` - solo condizioneLa parola chiave `break`La parola chiave `continue`Cicli annidatiRiepilogo - ripetere le azioni2Variabili e tipi di dati di base
Che cos'è una variabileInferenza del tipo con `:=`Numeri interi (int)Numeri in virgola mobileValori booleaniStringheValori zeroCostantiConvenzioni di denominazioneRiepilogo: variabili e tipi5Input/output di base
Output formattatoVerbi di formattazioneVisualizzazione dei tipiAcquisire input di base dall’utenteRiepilogo - Input e output8Funzioni
Capire le funzioniDichiarare una funzioneChiamare le funzioniParametri delle funzioniRestituire un singolo valoreRestituire più valoriValori restituiti con nomeFondamenti dell'ambito delle funzioniRiepilogo - Creare codice riutilizzabile11Tipi compositi: slice
Introduzione alle sliceDichiarare valori letterali di sliceCreare slice con `make`Lunghezza e capacità di una sliceAccedere agli elementi di una sliceAggiungere elementiCreare slice da slice/array esistentiIterare sulle sliceCopiare le sliceRiepilogo - Liste dinamiche14Gestione di base degli errori
Il concetto di erroreL'interfaccia `error`Funzioni che restituiscono erroriControllare la presenza di erroriCreare errori sempliciCreare errori formattatiGestione di base degli erroriRiepilogo - Gestire i problemi3Operatori di base
Operatori aritmeticiOperatore di divisioneL'operatore moduloOperatore di assegnazioneOperatori di assegnazione compostaIncremento e decrementoRiepilogo - Calcoli6Flusso di controllo: condizioni
L'istruzione `if`La parola chiave `else`La parola chiave `else if`Ombreggiamento delle variabili in `if`Inizializzare le variabiliL'istruzione `switch``switch` con espressioni`switch` senza espressioneLa parola chiave `fallthrough`Riepilogo: prendere decisioni9Puntatori
Che cos’è un puntatore?Dichiarare variabili puntatoreL’operatore indirizzoDereferenziare i puntatoriUsare i puntatori nelle funzioniPuntatori nilRipasso - Capire i puntatori12Tipi compositi: mappe
Introduzione alle mappeDichiarare i letterali delle mappeCreare mappe con `make`Aggiungere e aggiornare coppie chiave-valoreAccedere ai valori delle mappeVerificare l'esistenza di una chiaveEliminare elementi dalle mappeLunghezza delle mappeIterare sulle mappeRiepilogo - Archiviazione chiave-valoreEsercitati da solo: Compilatore Go online