Il concetto di errore
Fa parte della sezione Fondamenti del percorso GO di Coddy. Lezione 102 di 109.
In Go, gli errori sono valori che indicano che qualcosa è andato storto. Go gestisce gli errori in modo esplicito anziché usare le eccezioni.
Creiamo una funzione che potrebbe generare un errore quando divide dei numeri:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Questa funzione restituisce due valori: il risultato della divisione e un eventuale errore. Se il divisore è zero, restituiamo un messaggio di errore invece di tentare la divisione.
Ora usiamo la nostra funzione e gestiamo eventuali errori:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}Dopo aver eseguito questo codice, vedremo un messaggio di errore sullo schermo perché abbiamo provato a dividere per zero:
Error: cannot divide by zeroQuesto dimostra il modello di gestione degli errori di Go: controlla se si è verificato un errore (err != nil) e poi intraprendi l'azione appropriata. Se non si è verificato alcun errore, possiamo usare il risultato in tutta sicurezza.
Sfida
FacileIn questa sfida, ti eserciterai a gestire gli errori in Go. Creerai una funzione che divide due numeri e restituisce un errore se si tenta di dividere per zero.
Il tuo compito è:
- Completare la funzione
divide, che accetta due interi e restituisce il loro quoziente e un errore. - Se il divisore è zero, restituisci 0 e un errore con il messaggio "division by zero".
- Se la divisione è valida, restituisci il risultato e
nilcome errore. - Nella funzione
main, chiamadividecon i valori forniti e gestisci eventuali errori in modo appropriato.
Questo esercizio mostra come le funzioni Go restituiscano comunemente un risultato e un errore, e come controllare e gestire questi errori.
Provalo tu
package main
import (
"errors"
"fmt"
)
// divide divide a per b e restituisce il risultato
// Se b è 0, restituisce un errore
func divide(a, b int) (int, error) {
// TODO: Implementa la funzione divide
// Se b è 0, restituisci 0 e un errore con il messaggio "division by zero"
// Altrimenti, restituisci a/b e nil come errore
}
func main() {
// Primo caso di test
a, b := 10, 2
result, err := divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\n", result)
}
// Secondo caso di test
a, b = 8, 0
result, err = divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\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