English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base di Golang

Controllo di Golang

Funzione e metodo di Golang

Struttura di Golang

Tagli e array di Golang

Stringa (String) di Golang

Puntatore di Golang

Interfaccia di Golang

Concordanza di Golang

Eccezioni (Error) di Golang

Altri argomenti di Golang

Go 語言 Error(錯誤處理)

Go non ha un meccanismo di eccezione come try / catch in Java, non possiamo lanciare eccezioni in Go.

Go utilizza un altro meccanismo chiamatoMecanismo di panico ritardato e recupero

Go gestisce gli errori semplici delle funzioni e dei metodi restituendo un oggetto di errore. L'oggetto di errore può essere l'unico o l'ultimo valore di ritorno. Se la funzione non ha errori, l'oggetto di errore è nil.

Che sia ricevuto o meno un errore, dobbiamo sempre controllare l'errore nella chiamata.

Non dobbiamo mai ignorare gli errori, poiché possono causare il crash del programma.

Il metodo di rilevamento e segnalazione degli errori del linguaggio Go è

  • Le funzioni che possono causare errori restituiranno due variabili: un valore e un codice di errore, se con successo, nil; se si verifica una condizione di errore, allora == nil.

  • Controlliamo l'errore dopo la chiamata di funzione. Se si verifica un errore (if error != nil), fermiamo l'esecuzione della funzione reale (o l'intero programma se necessario).

Go ha un tipo di interfaccia di errore predefinito

type error interface {
    Error() string
}	

Possiamo utilizzare la funzione error.New del pacchetto error per definire il tipo di errore e fornire un messaggio di errore appropriato, ad esempio:

err := errors.New("math - 负数的平方根")

Esempio di errore

package main
import "errors"
import "fmt"
import "math"
func Sqrt(value float64) (float64, error) {
   if (value < 0) {
      return 0, errors.New("Math: 负数的平方根")
   }
   return math.Sqrt(value), nil
}
func main() {
   result, err := Sqrt(-64)
   if err != nil {
      fmt.Println(err)
   } else {
      fmt.Println(result)
   }
   result, err = Sqrt(64)
   if err != nil {
      fmt.Println(err)
   } else {
      fmt.Println(result)
   }
}

Output:

Math: Negative square root
8