Latest web development tutorials

Ir manejo de errores

Ir lenguaje proporciona un mecanismo muy sencillo el manejo de errores a través de la interfaz de error incorporado.

tipo de error es un tipo de interfaz, que es su definición:

type error interface {
    Error() string
}

Podemos aplicar error de tipo de interfaz para generar un mensaje de error en el código.

Función general, devuelve un mensaje de error al final del valor de retorno. Uso errors.New devuelve un mensaje de error:

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

En el siguiente ejemplo, que llamamos el sqrt cuando pasa un número negativo, entonces se obtiene el objeto de error es no nulo, en comparación con este objeto nulo, el resultado es verdadero, por lo fmt.Println (FMT paquete cuando el manejo de errores de error será llamado método) se llama a un error de salida, ver el siguiente código de ejemplo llama:

result, err:= Sqrt(-1)

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

Ejemplos

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)
	}

}

El programa anterior, la salida es:

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