Capire `panic`
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 42 di 68.
In Go, panic è una funzione integrata utilizzata in situazioni davvero eccezionali, in cui il programma incontra un errore irreversibile e deve interrompersi immediatamente. A differenza degli errori normali, che gestisci in modo corretto, panic è riservata ai guasti catastrofici che indicano che qualcosa non va fondamentalmente nella logica o nell'ambiente del programma.
Quando viene chiamato panic, interrompe immediatamente la normale esecuzione della funzione corrente e inizia a svolgere lo stack delle chiamate. Questo lo rende molto diverso dall'approccio tipico di Go, che consiste nel restituire errori che possono essere gestiti dal codice chiamante.
In Go idiomatico, panic si usa raramente. La community di Go preferisce nettamente la gestione esplicita degli errori tramite valori restituiti, anziché la gestione degli errori basata su panic. Potresti incontrare panic in situazioni come l’accesso a un array fuori dai limiti, la dereferenziazione di un puntatore nil o quando una libreria rileva uno stato impossibile che indica un errore di programmazione.
La maggior parte dei programmi Go dovrebbe gestire gli errori in modo corretto usando l'interfaccia standard error di cui hai imparato. panic dovrebbe essere preso in considerazione solo quando davvero non c'è un modo ragionevole per far continuare a funzionare il programma.
Provalo tu
Questa lezione non include una sfida di codice.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività7Gestione degli errori in dettaglio
Tipi di errore personalizzatiAvvolgere gli errori con `%w`Rimuovere il wrapping con `errors.Is`Rimuovere il wrapping con `errors.As`Capire `panic`Usare `recover`Riepilogo - Divisione sicura2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online