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

لماذا يجب أن تكون وسيطة `http.Request` مؤشرًا في Go؟

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

Why Does the `http.Request` Argument Need to Be a Pointer in Go?

لماذا يجب أن تكون وسيطة طلب HTTP مؤشرًا؟

في Go، نوع http.Request عبارة عن بنية كبيرة تحتوي على معلومات متنوعة حول طلب HTTP. للتعامل مع طلبات HTTP بكفاءة، يستخدم Go المؤشرات لتجنب الحمل الزائد لنسخ هياكل البيانات الكبيرة.

package main

import (
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("hello world"))
    })
    http.ListenAndServe(":8000", nil)
}

إذا قمت بإزالة العلامة النجمية (*) في *http.Request، فسوف تواجه خطأ لأن الوظيفة الحرفية تتوقع مؤشرًا إلى نوع http.Request.

  

github.com/creating_web_app_go/main.go:8: cannot use func literal (type func(http.ResponseWriter, http.Request)) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc

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

لذلك، يجب أن تكون وسيطة http.Request مؤشرًا لضمان المعالجة الفعالة لطلبات HTTP والمحافظة على سلامة معلومات الدولة التي تحتوي عليها.

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

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

Copyright© 2022 湘ICP备2022001581号-3