Latest web development tutorials

Ir tratamento de erros

Ir linguagem fornece um mecanismo de tratamento de erros muito simples através da interface de erro embutido.

tipo de erro é um tipo de interface, que é a sua definição:

type error interface {
    Error() string
}

Podemos implementar erro tipo de interface para gerar uma mensagem de erro no código.

Função geralmente retorna uma mensagem de erro no final do valor de retorno. Use errors.New retorna uma mensagem de erro:

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

No exemplo a seguir, nós chamamos o Sqrt ao passar um número negativo, então você obtém o objeto de erro é não-nulo, em comparação com este objeto nulo, o resultado é verdadeiro, então fmt.Println (pacote fmt quando tratamento de erros de erro será chamado método) é chamado para erro de saída, consulte o seguinte exemplo de código chama:

result, err:= Sqrt(-1)

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

Exemplos

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

}

O programa acima, a saída é:

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