الذهاب معالجة الأخطاء
الذهاب توفر لغة آلية معالجة الأخطاء بسيطة جدا من خلال المدمج في واجهة خطأ.
نوع الخطأ هو نوع الواجهة، وهو تعريفه:
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