64 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Receive data with your web server
 | |
| localeTitle: تلقي البيانات مع خادم الويب الخاص بك
 | |
| ---
 | |
| بمجرد إعداد خادم الويب الخاص بك والتأكد من أنه يمكن أن يقدم بعض المحتويات المفيدة ، قد ترغب في جعله أكثر تفاعلية عن طريق السماح له بقبول البيانات. دعونا نبدأ بكتابة بعض الرموز:
 | |
| 
 | |
|  `package main 
 | |
|  
 | |
|  import ( 
 | |
|   "net/http" 
 | |
|   "html/template" 
 | |
|  ) 
 | |
|  
 | |
|  type PAGE struct { 
 | |
|   NAME string 
 | |
|  } 
 | |
|  
 | |
|  var page PAGE 
 | |
|  
 | |
|  func main() { 
 | |
|   http.HandleFunc("/", servePage) 
 | |
|   http.ListenAndServe(":8080", nil) 
 | |
|  } 
 | |
|  
 | |
|  func servePage(writer http.ResponseWriter, reqest *http.Request) { 
 | |
|   page.NAME = request.FormValue("name") 
 | |
|   template := template.New("sayHello") 
 | |
|   template, _ = template.Parse("Hello {{.NAME}}!") 
 | |
|   template.Execute(writer, page) 
 | |
|  } 
 | |
| ` 
 | |
| 
 | |
| دعونا كسر هذا الرمز إلى أسفل. أولاً وقبل كل شيء ، نبدأ باستيراد `net/http` لخادم الويب و `html/template` أجل templating. تفترض هذه المقالة أنك تعرف بالفعل كيفية القالب في Go. إذا كنت لا تعرف هذا حتى الآن ، يجب عليك قراءة المقال حول templating أولاً.
 | |
| 
 | |
| ثم نقوم بإنشاء نوع يسمى `PAGE` ، مع فتحة واحدة تسمى `NAME` (هذه `string` ). كما نقوم أيضًا بإنشاء متغير عالمي يسمى `page` وهو من النوع `PAGE` : البنية التي أنشأناها للتو.
 | |
| 
 | |
| في دالة `servePage` يوجد شيء واحد مهم بالفعل لهذه المقالة: طريقة `FormValue` نستخدمها في `request` .
 | |
| 
 | |
| قبل أن نتابع ، تحتاج أولاً إلى معرفة كيفية إنشاء `URL` . لنأخذ `URL` التالي كمثال:
 | |
| 
 | |
|  `https://google.com/search?q=free+code+camp 
 | |
| ` 
 | |
| 
 | |
| إذا أدخلت `URL` أعلاه في المتصفح ، فستجري بحثًا في Google عن `free code camp` . تم بناء `URL` على النحو التالي:
 | |
| 
 | |
| 1.  `https://` - هذا هو البروتوكول
 | |
| 2.  `google.com` - هذا هو اسم النطاق والمنفذ (في هذه الحالة لا يوجد منفذ مذكور - لذلك يستخدم المتصفح المنفذ الافتراضي للبروتوكول)
 | |
| 3.  `/search` - هذا هو المسار
 | |
| 4.  `q=free+code+camp` - هذا هو `query`
 | |
| 
 | |
| الاستعلام هو الجزء الذي نتحدث عنه في هذه المقالة. يشاهد خادم Google `URL` هذا وبسبب السمة `q` في الاستعلام وقيمة `q` - في هذه الحالة `free+code+camp` - فإنه يعرف المكان الذي يجب البحث عنه.
 | |
| 
 | |
| يمكننا أيضًا تطبيق ذلك على خادمنا. لنطلق البرنامج وننقل المتصفح إلى:
 | |
| 
 | |
|  `http://localhost:8080/?name=world 
 | |
| ` 
 | |
| 
 | |
| سيكون الرد:
 | |
| 
 | |
|  `Hello world! 
 | |
| ` 
 | |
| 
 | |
| كيف يعمل هذا؟ حسنًا ، لقد أعطينا `FormValue` معلمة `name` . بهذه الطريقة ، تعلم `FormValue` أننا نريد قيمة سمة `name` في طلب البحث. في هذه الحالة هو `world` ، لذلك الأسلوب يعود `world` . ثم يتم وضع تلك السلسلة في متغير `page` ويقوم القالب بالباقي.
 | |
| 
 | |
| هذا بالطبع تطبيق بسيط لهذه الوظيفة ، ولكن يمكنك القيام بالكثير من الأشياء بها. على سبيل المثال: يمكنك قبول عناوين البريد الإلكتروني والسماح للبرنامج بتخزينها في ملف. |