"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا يمكنني الإعلان عن المتغيرات داخل البيانات الشرطية في Go؟

لماذا لا يمكنني الإعلان عن المتغيرات داخل البيانات الشرطية في Go؟

تم النشر بتاريخ 2024-11-09
تصفح:392

Why Can't I Declare Variables Inside Conditional Statements in Go?

خطأ: الإقرارات المتغيرة داخل البيانات الشرطية

عند مواجهة Go لأول مرة، قد تواجه ارتباكًا فيما يتعلق بالإعلان المتغير داخل البيانات الشرطية (على سبيل المثال، إذا -آخر). تنشأ هذه المشكلة عندما يتم الإعلان عن المتغيرات (على سبيل المثال، req، er) وتعيينها داخل الكتلة الشرطية.

نطاق المتغير: فهم مستوى الكتلة

في Go، المتغيرات هي محددة ضمن نطاق محدد، والذي يقتصر على الكتلة التي تم الإعلان عنها. خذ بعين الاعتبار المثال التالي:

package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
    {
        // New scope
        a := 2
        fmt.Println(a)
    }
    fmt.Println(a) // Prints 1
}

يوضح الإخراج أن إعادة تعيين قيمة a داخل النطاق المتداخل لا يؤثر على قيمتها خارج هذا النطاق. وذلك لأنه تم الإعلان عن a محليًا داخل النطاق الداخلي، مما يؤدي إلى إنشاء مثيل جديد للمتغير، على غرار:

var a int = 1
var b int = 2
fmt.Println(a)
fmt.Println(b)

تطبيق المفهوم على العبارات الشرطية

عند محاولة الإعلان عن المتغيرات في العبارات الشرطية:

if condition {
    var req *http.Request
    var er error
}

سوف تواجه خطأ ينص على "تم الإعلان عن req ولم يتم استخدامه" أو "تم الإعلان عنه ولم يتم استخدامه" لأن المتغيرات مرئية فقط داخل كتلة العبارة الشرطية.

الحل: إعلان المتغيرات خارج الكتل الشرطية

لحل هذه المشكلة، يجب الإعلان عن المتغيرات خارج الكتلة الشرطية:

var req *http.Request
var er error
if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") {
    req, er = http.NewRequest(r.Method, r.Uri, b)
} else {
    req, er = http.NewRequest(r.Method, r.Uri, b)
}

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

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3