كيفية التعامل مع الأخطاء في Golang؟

Kyfyt Alt Aml M Alakhta Fy Golang



Go هي لغة برمجة محبوبة وقد نمت شعبيتها بسبب فعاليتها وسرعتها وكفاءتها. ومع ذلك ، يمكن أن تحدث أخطاء أثناء مرحلتي التطوير والتنفيذ ، تمامًا مثل أي لغة برمجة أخرى. يعد التعامل مع الأخطاء بشكل فعال أمرًا ضروريًا لضمان موثوقية واستقرار برامج Go الخاصة بك.

ستدرس هذه المقالة عدة طرق وإجراءات موصى بها لإدارة الأخطاء في Go.







معالجة الأخطاء في Golang

في Go ، يمكنك ذلك معالجة الأخطاء من خلال الطرق المذكورة أدناه:



1: وظيفة جديدة

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



الحزمة الرئيسية

يستورد 'أخطاء'
يستورد 'FMT'

فحص func ( سلسلة الاسم ) خطأ {
nError: = أخطاء. جديد ( 'اسم غير صالح' )
لو اسم ! = 'Linux' {
يعود لا خطأ
}
يعود لا شيء
}
func الرئيسي ( ) {
الاسم: = 'Linux'
يخطئ: = تحقق ( اسم )
لو يخطئ ! = لا شيء {
fmt.Println ( يخطئ )
} آخر {
fmt.Println ( 'اسم صالح' )
}
}





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

تم تعيين متغير الاسم على لينكس في استدعاء الوظيفة الرئيسية لـ اسم الشيك دالة ، والتي تأخذ أيضًا متغير الاسم كوسيطة. تقوم الوظيفة الرئيسية بطباعة رسالة الخطأ إذا كان ملف اسم الشيك ترجع الدالة خطأ. تقوم الوظيفة الرئيسية بطباعة ملف اسم صالح إذا كان اسم الشيك دالة ترجع لا شيء.



انتاج |

2: وظيفة Errorf ()

ال إيرورف () تسمح لنا الوظيفة في Go بالتعامل مع الأخطاء أيضًا. إيرورف () يعطينا خيار تنسيق رسالة الخطأ. من خلال استيراد حزمة fmt ، يمكن للمطورين استخدامها لتخصيص رسائل الخطأ لتناسب احتياجاتهم. إيرورف () يبسط ويحسن كفاءة إدارة ونقل الأخطاء في Go.

الحزمة الرئيسية
يستورد 'FMT'

func div ( n1 ، n2 أنت ) خطأ {

لو n2 == 0 {
يعود اف ام تي ايرورف ( '٪ d /٪ d لا يمكن قسمة رقم على صفر ' , n1, n2 )
}
يعود لا شيء
}
func الرئيسي ( ) {
يخطئ: = div ( 42 و 0 )
لو يخطئ ! = لا شيء {
fmt.Printf ( 'خطأ:٪ s' ، يخطئ )
} آخر {
fmt.Println ( 'تقسيم صالح' )
}
}

في الكود أعلاه ، فإن ملف شعبة تقبل الدالة إدخالين صحيحين ، n1 و n2 ، وإذا كانت n2 تساوي صفرًا ، فإنها تنتج خطأ. تنتج الدالة خطأ برسالة تحتوي على قيم n1 و n2 إذا كانت n2 تساوي صفرًا. ترجع الدالة صفرًا لتوضح أنه لا يوجد خطأ إذا لم يكن n2 صفرًا.

يتم حفظ الخطأ الذي ترجعه div في متغير err عندما تقوم الوظيفة الرئيسية بتشغيل div مع القيمتين 42 و 0. تستخدم الوظيفة الرئيسية fmt.Printf لعرض رسالة الخطأ إذا قامت دالة div بإرجاع خطأ. تطبع الوظيفة الرئيسية تقسيم صالح إذا كانت الدالة div ترجع صفرًا.

انتاج |

3: معالجة الخطأ الصريح

يشجع Go على إدارة الأخطاء بشكل صريح مقارنةً بلغات البرمجة الأخرى ، والتي تعتمد كثيرًا على الاستثناءات. يشجع هذا الأسلوب المطورين على استخدام عبارات if للتحقق صراحة من الأخطاء ، بدلاً من الاعتماد على كتل try-catch. من خلال القيام بذلك ، من المرجح أن يتم العثور على الأخطاء ومعالجتها بشكل صحيح. لتسهيل ذلك ، يوفر Go ملف إذا أخطأت! البيان ، والذي يسمح للمطورين بالتحقق من الأخطاء بعد تنفيذ الوظيفة ، واتخاذ الإجراءات المناسبة بناءً على النتيجة. من خلال المعالجة الواضحة للخطأ ، تقدم Go نهجًا أكثر تنظيماً وموثوقية لإدارة الأخطاء.

الحزمة الرئيسية
يستورد 'FMT'

func divide ( أ ، ب تعويم 64 ) ( float64 ، خطأ ) {
لو ب == 0 {
يعود 0 ، fmt.Errorf ( 'لا يمكن القسمة على صفر' )
}
يعود أ / ب ، لا شيء
}
func الرئيسي ( ) {
النتيجة ، يخطئ: = القسمة ( 13 و 3 )
لو يخطئ ! = لا شيء {
fmt.Printf ( 'خطأ:٪ v ' ، يخطئ )
} آخر {
fmt.Printf ( 'النتيجة:٪ f ' ، نتيجة )
}
نتيجة ، يخطئ = قسمة ( 23 و 0 )
لو يخطئ ! = لا شيء {
fmt.Printf ( 'خطأ:٪ v ' ، يخطئ )
} آخر {
fmt.Printf ( 'النتيجة:٪ f ' ، نتيجة )
}
}

في هذا الرسم التوضيحي ، تُستخدم دالة القسمة لتقسيم قيمتين. الإخراج هو نتيجة القيام بذلك. إذا كان الرقم الثاني هو 0 ، فإن الوظيفة تنتج خطأ برسالة خطأ مميزة.

يتم استدعاء القسمة مرتين في الوظيفة الرئيسية: مرة بمدخلات صالحة ومرة ​​بإدخال غير صالح. إذا كان يخطئ! = لا شيء يتم استخدام العبارة لتحديد ما إذا كان خطأ ما قد حدث في كل مرة يتم فيها استخدام وظيفة القسمة. تتم طباعة رسالة خطأ في حالة حدوثها. إذا لم يكن كذلك ، تتم طباعة النتيجة.

انتاج |

4: التأجيل والذعر والتعافي

يوفر Golang أيضًا ملف تأجيل البيان ، والذي يستخدم لتنفيذ وظيفة بعد الانتهاء من برنامج أو كتلة معينة من التعليمات البرمجية. ال تأجيل غالبًا ما يتم استخدام العبارة جنبًا إلى جنب مع استعادة وظيفة للقبض على أخطاء الذعر وقت التشغيل والتعافي منها. عند حدوث خطأ ذعر في وقت التشغيل ، فإن ملف استعادة تستخدم الوظيفة للتعافي من حالة الخطأ ومنع البرنامج من الانهيار. هذا مفيد لمهام التنظيف مثل إغلاق الملفات أو إغلاق اتصالات الشبكة أو تحرير الموارد. بتأجيل هذه المهام ، فإنك تضمن تنفيذها حتى في حالة حدوث خطأ.

ال ذعر يستخدم لإيقاف التنفيذ العادي للبرنامج عند حدوث خطأ غير متوقع أثناء استعادة يستخدم للتعامل مع حالة الذعر ومواصلة تنفيذ البرنامج.

الحزمة الرئيسية

يستورد 'FMT'

func الانتعاش من الذعر ( ) {
لو r: = الاسترداد ( ) ؛ ص ! = لا شيء {
fmt.Println ( 'تعافى من الذعر:' ، ص )
}
}
func divide ( x ، y float64 ) تعويم 64 {
تأجيل التعافي من الذعر ( )

لو و == 0 {
ذعر ( 'لا يمكن القسمة على صفر' )
}
يعود x / و
}
func الرئيسي ( ) {
fmt.Println ( يقسم ( 13 و 3 ) )
fmt.Println ( يقسم ( 23 و 0 ) )
}

في الكود أعلاه ، يتم استخدام دالة القسمة لتقسيم قيمتين من الفاصلة العائمة. الإخراج هو نتيجة القيام بذلك. يتم إخراج رسالة خطأ مخصصة بواسطة الوظيفة إذا كان الرقم الثاني صفرًا. يتم استخدام العبارة defer لاستدعاء التعافي من الذعر وظيفة. ال التعافي من الذعر ستكتشف الوظيفة حالة الذعر التي حدثت داخل وظيفة القسمة وتطبع خطأ إذا حدث.

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

انتاج |

بعد اكتشاف الخطأ ، تعافى البرنامج من الذعر واستمر في العمل. ومع ذلك ، أصيب الكود بالذعر ولم يُرجع قيمة في الاستدعاء الثاني لتقسيمه ، وهذا هو سبب إرجاعه للصفر.

5: التفاف الخطأ

يتضمن Go أيضًا ميزة تُعرف باسم التفاف الخطأ ، مما يسمح لك بإضافة سياق إضافي إلى رسالة الخطأ. هذا مفيد لتسجيل المشاكل أو تقديم مزيد من التفاصيل في رسائل الخطأ. يمكن تحقيق ذلك عن طريق إنشاء نوع خطأ يدمج الخطأ الأصلي والسياق الإضافي.

الحزمة الرئيسية

يستورد 'أخطاء'
يستورد 'FMT'

func الرئيسي ( ) {
لو يخطئ: = شريط ( ) ؛ يخطئ ! = لا شيء {
fmt.Println ( يخطئ )
}
}
func divide ( أ ، ب تعويم 64 ) ( float64 ، خطأ ) {
لو ب == 0 {
يعود 0 أخطاء جديدة ( 'القسمة على صفر' )
}
يعود أ / ب ، لا شيء
}
شريط func ( ) ( خطأ يخطئ ) {
_ ، يخطئ = قسمة ( 42 و 0 )
لو يخطئ ! = لا شيء {
يعود اف ام تي ايرورف ( 'فشل في الحساب:٪ w' ، يخطئ )
}
يعود لا شيء
}

في الكود أعلاه ، تحسب دالة القسمة نسبة رقمين في هذا المثال وتلقي بخطأ إذا كانت القيمة الثانية هي صفر. تستدعي وظيفة الشريط وظيفة القسمة ثم تلتف حول الخطأ يقسم يعود في خطأ جديد برسالة تتضمن رسالة الخطأ الأصلية باستخدام وظيفة fmt.Errorf. يتم استدعاء وظيفة الشريط بواسطة الوظيفة الرئيسية ، والتي تطبع أيضًا أي أخطاء تُرجعها.

انتاج |

خاتمة

يجب أن يشمل تطوير البرمجيات معالجة الأخطاء ، و Golang لديه العديد من الوظائف والطرق المضمنة للقيام بذلك بأمان. تتيح هذه الآليات للمطورين اكتشاف الأخطاء والتعافي منها ، ومنع تعطل البرنامج ، وتقديم رسائل خطأ إعلامية للمستخدمين النهائيين. باستخدام آليات معالجة الأخطاء هذه بشكل فعال ، يمكن للمطورين إنشاء تطبيقات برمجية قوية وموثوقة وفعالة.