Latest web development tutorials

Zum Fehlerbehandlung

Go Sprache gebaut, um einen sehr einfachen Fehlerbehandlung Mechanismus durch Fehler-Schnittstelle zur Verfügung stellt.

Fehlertyp ist ein Interface-Typ, der seine Definition lautet:

type error interface {
    Error() string
}

Wir können Fehler Interface-Typ implementieren eine Fehlermeldung in dem Code zu generieren.

Funktion im Allgemeinen gibt eine Fehlermeldung am Ende des Rückgabewertes. Verwenden errors.New gibt eine Fehlermeldung:

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

Im folgenden Beispiel haben wir die Sqrt nennen, wenn eine negative Zahl vorbei, dann erhalten Sie die Fehlerobjekt ist nicht gleich Null, verglichen mit diesem Objekt Null, ist das Ergebnis true, so fmt.Println (fmt-Paket, wenn die Fehlerbehandlung Fehler aufgerufenen Methode Ausgabefehler genannt werden), siehe die folgende Beispielcode ruft:

result, err:= Sqrt(-1)

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

Beispiele

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

}

Das obige Programm, das Ausgabe ist:

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