Latest web development tutorials

Vai gestione degli errori

Vai lingua fornisce un meccanismo molto semplice la gestione degli errori tramite interfaccia errore built-in.

tipo di errore è un tipo di interfaccia, che è la sua definizione:

type error interface {
    Error() string
}

Possiamo implementare errore tipo di interfaccia per generare un messaggio di errore nel codice.

Funzione restituisce in genere un messaggio di errore al fine del valore di ritorno. Utilizzare errors.New restituisce un messaggio di errore:

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
    // 实现
}

Nel seguente esempio, che noi chiamiamo la Sqrt quando passa un numero negativo, allora si ottiene l'oggetto di errore è non nullo, a fronte di questo oggetto nullo, il risultato è vero, così fmt.Println (pacchetto fmt quando la gestione degli errori errore verrà chiamato il metodo) viene chiamato per errore in uscita, vedi chiama il seguente codice di esempio:

result, err:= Sqrt(-1)

if err != nil {
   fmt.Println(err)
}

Esempi

package main

import (
	"fmt"
)

// 定义一个 DivideError 结构
type DivideError struct {
	dividee int
	divider int
}

// 实现 	`error` 接口
func (de *DivideError) Error() string {
	strFormat := `
	Cannot proceed, the divider is zero.
	dividee: %d
	divider: 0
`
	return fmt.Sprintf(strFormat, de.dividee)
}

// 定义 `int` 类型除法运算的函数
func Divide(varDividee int, varDivider int) (result int, errorMsg string) {
	if varDivider == 0 {
		dData := DivideError{
			dividee: varDividee,
			divider: varDivider,
		}
		errorMsg = dData.Error()
		return
	} else {
		return varDividee / varDivider, ""
	}

}

func main() {

	// 正常情况
	if result, errorMsg := Divide(100, 10); errorMsg == "" {
		fmt.Println("100/10 = ", result)
	}
	// 当被除数为零的时候会返回错误信息
	if _, errorMsg := Divide(100, 0); errorMsg != "" {
		fmt.Println("errorMsg is: ", errorMsg)
	}

}

Il programma precedente, l'uscita è:

100/10 =  10
errorMsg is:  
	Cannot proceed, the divider is zero.
	dividee: 100
	divider: 0