Latest web development tutorials

الذهاب معالجة الأخطاء

الذهاب توفر لغة آلية معالجة الأخطاء بسيطة جدا من خلال المدمج في واجهة خطأ.

نوع الخطأ هو نوع الواجهة، وهو تعريفه:

type error interface {
    Error() string
}

يمكننا تنفيذ الخطأ من النوع اجهة لإنشاء رسالة خطأ في التعليمات البرمجية.

الدالة بإرجاع عموما رسالة خطأ في نهاية قيمة الإرجاع. استخدام errors.New بإرجاع رسالة الخطأ:

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

في المثال التالي، فإننا ندعو الجذر التربيعي عند تمرير رقم سالب، ثم تحصل على وجوه الخطأ هو عدم لا شيء، مقارنة مع هذا شيء كائن، والنتيجة هي الحقيقية، لذلك fmt.Println (حزمة معاهدة المواد الانشطارية عند التعامل مع الخطأ ودعا سيتم استدعاء أسلوب) الخطأ إلى الخطأ الناتج، انظر يدعو نموذج التعليمات البرمجية التالي:

result, err:= Sqrt(-1)

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

أمثلة

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

}

البرنامج المذكور أعلاه، والناتج هو:

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