Najlepszy samouczek Idź obsługę błędów W 2024 r. W tym samouczku możesz dowiedzieć się Idź obsługę błędów

Idź obsługę błędów

Idź język zapewnia bardzo prosty mechanizm obsługi błędów poprzez wbudowany interfejs błędów.

Rodzaj błędu jest typ interfejsu, który jest jego definicja:

type error interface {
    Error() string
}

Możemy realizować błędzie typ interfejsu generować komunikat o błędzie w kodzie.

Funkcja ogół zwraca komunikat o błędzie na końcu wartości zwracanej. Korzystanie errors.New zwraca komunikat o błędzie:

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

W poniższym przykładzie, nazywamy sqrt podczas przechodzenia liczbę ujemną, a następnie pojawi się przedmiot o błędzie nie jest zerowa, w porównaniu z tym obiektem zera, wynik jest prawdziwy, więc fmt.Println (pakiet fmt podczas obsługi błędu błąd zostanie wywołana metoda) jest powołany do błędu wyjścia, zobacz następujący przykładowy kod wywołuje:

result, err:= Sqrt(-1)

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

Przykłady

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

}

Powyższy program, wyjście jest:

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

Idź obsługę błędów
10/30