في 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