65 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Receive data with your web server | |||
|  | localeTitle: Получать данные с вашего веб-сервера | |||
|  | ---
После того, как вы настроили свой веб-сервер и убедитесь, что он может обслуживать полезный контент, вы можете сделать его более интерактивным, позволяя ему принимать данные. Начнем с написания кода: | |||
|  | 
 | |||
|  | ```go | |||
|  | 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` для шаблонов. В этой статье предполагается, что вы уже знаете, как шаблон в Go. Если вы еще этого не знаете, сначала прочитайте статью о шаблонах. | |||
|  | 
 | |||
|  | Затем мы создаем тип `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` а шаблон выполняет все остальное. | |||
|  | 
 | |||
|  | Это, конечно, действительно простая реализация этой функции, но вы могли бы сделать с ней многое. Например: вы можете принять адреса электронной почты и позволить программе хранить их в файле. |