English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
لا يحتوي Go على آلية استثناء مثل try / catch في Java، ولا يمكننا رمي استثناءات في Go.
يستخدم Go آلية أخرى تُدعىآلية التأخير والإصابة والاستعادة
يتعامل Go مع الأخطاء البسيطة عن طريق العودة إلى دالة أو طريقة واحدة باستخدام علامة النهاية الأخيرة. قد يكون الجسم المكون من أخطاء هو أو هو أو الأخير. إذا لم يكن هناك خطأ، فإن جسم الخطأ يكون nil.
يجب أن نتحقق من وجود خطأ دائمًا في جملة الدعوة.
لا يجب أبدًا تجاهل الأخطاء، لأنها قد تؤدي إلى انهيار البرنامج.
يستخدم Go طريقة لتحديد ومراسلة حالات الأخطاء
ستعيد الدوال التي يمكن أن تنشأ خطأ اثنين من المتغيرات: قيمة واحدة وكود خطأ، إذا كانت النتيجة ناجحة، فإن الخطأ يكون nil؛ وإذا كانت هناك حالة خطأ، فإن الخطأ يكون == nil.
تُحقق من وجود خطأ بعد دعوة الدالة. إذا حدث خطأ (if error != nil)، توقف عن تنفيذ الوظيفة الفعلية (أو كامل البرنامج إذا لزم الأمر).
يحتوي Go على نوع واجهة أخطاء مسبقًا
type error interface { Error() string }
يمكننا استخدام حزمة الأخطاء لتحديد نوع الخطأ وتقديم رسالة خطأ مناسبة، مثل:
err := errors.New("math - سقوط عدد سالب")
package main import "errors" import "fmt" import "math" func Sqrt(value float64) (float64, error) { if (value < 0) { return 0, errors.New("Math: سقوط عدد سالب") } return math.Sqrt(value), nil } func main() { result, err := Sqrt(-64) if err != nil { fmt.Println(err) } else { fmt.Println(result) } result, err = Sqrt(64) if err != nil { fmt.Println(err) } else { fmt.Println(result) } }
الناتج:
الرياضيات: الجذر التربيعية السالب 8