From adef6a34645ef91ca614f26f188add827e72bc9c Mon Sep 17 00:00:00 2001 From: r3a70 <96728703+r3a70@users.noreply.github.com> Date: Tue, 30 May 2023 14:04:41 +0330 Subject: [PATCH] Update 1.13-defer-panic-recovery.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit تصحیح متن --- .../chapter 1/1.13-defer-panic-recovery.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/content/chapter 1/1.13-defer-panic-recovery.md b/content/chapter 1/1.13-defer-panic-recovery.md index 29e62ef85..decba8b6d 100644 --- a/content/chapter 1/1.13-defer-panic-recovery.md +++ b/content/chapter 1/1.13-defer-panic-recovery.md @@ -77,7 +77,7 @@ $ go run main.go 2 1 ``` -**دقت داشته باشید که مقداردهی پارامترهای ورودی, برای تابعی که آن را difer کردیم در همان لحظه call شدن آن انجام میشود. به مثال زیر توجه کنید:** +**دقت داشته باشید که مقداردهی پارامترهای ورودی, برای تابعی که آن را defer کردیم در همان لحظه call شدن آن انجام میشود. به مثال زیر توجه کنید:** ```shell package main @@ -100,22 +100,22 @@ First ``` در این مرحله شما باید پی برده باشید که **defer** در همان خطی که نوشته شده است صدا زده میشود, ولی اجرای آن دقیقا به قبل از **return** در تابع موکول میشود. -## 1.13.2 پانیک (panic) +## 1.13.2 پنیک (panic) در زبان گو panic همانند exception به معنای خروج از برنامه در شرایط غیر عادی می باشد. panic در ۲ حالت زیر پیش می آید: -- خطاهای {{< tooltip text="در زمان اجرا" note="runtime" >}} برنامه +- خطاهای {{< tooltip text="در زمان اجرای" note="runtime" >}} برنامه - فراخوانی تابع panic توسط برنامه نویس در بخش های مختلف برنامه ```go func panic(v interface{}) ``` -از تابع فوق شما می توانید برای ایجاد panic استفاده کنید و به عنوان ورودی دلیل panic را می توانید در قالب خطا یه یک متن مشخص کنید. +شما میتوانید با استفاده از تابع فوق که در توابع `built-in` گولنگ وجود دارد, panic ایجاد کنید و به عنوان ورودی دلیل panic را در قالب یک رشته به تابع ارسال کنید. {{< hint info >}} -تایپ `{}interface` یک تایپ خیلی کاربردی می باشد برای مواقعی نمی دانیم ورودی یا خروجی تابع یا تایپ متغیر چی میخواهد باشد از اینترفیس استفاده می کنیم. +تایپ `{}interface` یک تایپ بسیار کاربردی است. ما از این تایپ مواقعی استفاده میکنیم که نمیدانیم ورودی تابع چه خواهد بود. به مثال زیر توجه کنید: ```go package main @@ -142,14 +142,14 @@ abcd, string 2.5, float64 ``` -و به عنوان یک تایپ ضمنی می باشد که در ادامه فصل بعدی بیشتر آشنا خواهیم شد. +همونطور که در مثال بالا دیدید, ما به تایپ `interface` چندین نوع دیتا تایپ رو دادیم و خود کامپایلر زبان گو متوجه نوع اون تایپ ها شد. در فصل بعدی بیشتر با تایپ ها آشنا خواهید شد. {{< /hint >}} ### 1.13.2.1 خطای panic در زمان اجرا (runtime) خطاهای panic در زمان اجرا به دلایل زیر می تواند رخ دهد : - خطای Out of bounds/range array/slice -- فراخوانی تابع که nil pointer باشد +- فراخوانی متغیری که nil pointer باشد `یعنی به هیچ آدرسی از حافظه ` **memory** `اشاره نمیکند` - ارسال داده برروی کانال های بسته شده - type assertion نادرست @@ -183,10 +183,11 @@ main.main() exit status 2 ``` -در تابع فوق ما یک تابع جهت چاپ یک المنت در داخل slice نوشتیم و به عنوان ورودی a و اندیس ۲ را می دهیم در صورتیکه slice ما فقط ۲ تا المنت بیشتر ندارد 0 و 1 ما به اندیس ۲ اشاره کردیم که باعث بروز panic شده است. +در تابع فوق ما یک تابع نوشتیم که به عنوان ورودی یک اسلایس از نوع رشته و یک ایندکس از نوع عدد از ما دریافت میکند و المنت **ایندکسم**‌ اون اسلایس را برای ما چاپ میکند `در مثال بالا اندیس شماره 2. یعنی اندیس شماره 2 از اسلایسی که به عنوان ورودی گرفته است`. این کار ما باعث بروز یک **panic** میشود, فکر میکنید به چه دلیل ؟ بله به این دلیل که اسلایس ما اندیس شماره 2 ندارد. دلیل آن هم این است که اندیس از 0 شروع میشود. +پنیک یک سری اطلاعات در مورد چرایی بوجود امدنش به ما میدهد که در ادامه آنهارو توضیح دادیم: - پانیک رخ داده شامل متن خطا -- محل رخ دادن panic در قالب stacktrace می باشد +- محل رخ دادن panic در قالب stacktrace ### 1.13.2.2 خطای panic از قبل تعیین شده توسط برنامه نویس