Request.PathValue
قراءة قيمة wildcard من المسار Request.PathValue
PathValue تُرجع قيمة الجزء المطابق لـ wildcard بنمط ServeMux المسجَّل، بدل استخراجها يدويًا من r.URL.Path بتقطيع النص.
لما يطابق نمط ServeMux طلبًا وفيه wildcard مثل {id}، PathValue(name) تعيد النص المطابق فعليًا لذلك الاسم. تعيد نصًّا فارغًا لو لم يُطابَق الطلب أصلًا ضدّ نمط، أو لو لا يوجد wildcard بهذا الاسم بالنمط المطابق. القيمة المُعادة نص دائمًا — تحويلها لرقم أو نوع آخر مسؤوليتك بعد الاستدعاء.
إلى جانبها توجد SetPathValue، مفيدة لحقن قيمة يدويًا داخل اختبار وحدة لمعالج منفرد، دون الحاجة لبناء ServeMux كامل وتمرير طلب حقيقي خلاله فقط لأجل الاختبار.
الصياغة
func (r *Request) PathValue(name string) string func (r *Request) SetPathValue(name, value string)
📄 مثال
func getItem(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id")
n, err := strconv.Atoi(id)
if err != nil {
http.Error(w, "معرّف غير صالح", http.StatusBadRequest)
return
}
fmt.Fprintf(w, "العنصر رقم %d", n)
}أهم النقاط
| العنصر | الوظيفة |
|---|---|
| r.PathValue("id") | يعيد القيمة كنص دومًا، تحتاج تحويلها بنفسك إن أردت رقمًا |
| r.SetPathValue(name, value) | لحقن قيمة يدويًا داخل اختبار معالج منفرد دون المرور فعليًا عبر ServeMux |
💡 نصائح عملية
- تحقّق من فراغ القيمة العائدة قبل استخدامها لو النمط قد لا يحتوي wildcard بهذا الاسم أصلًا
- استخدم SetPathValue لاختبار handler منفرد مباشرة دون بناء ServeMux كامل بالاختبار
⚠️ أخطاء شائعة
- افتراض أن PathValue تعيد رقمًا صحيحًا مباشرة — تعيد نصًّا دائمًا، ويجب تحويله بـ strconv
- استخدامها مع مكتبة توجيه خارجية غير net/http.ServeMux القياسية — تعمل فقط مع الأنماط المسجَّلة عبرها
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GO الكامل بالعربي.