71 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Using templates with your web server | |||
|  | localeTitle: Использование шаблонов с вашим веб-сервером | |||
|  | ---
Когда у вас есть веб-сервер, вы можете вставить данные в свои ответы. Посмотрим на код: | |||
|  | 
 | |||
|  | ```go | |||
|  | package main  | |||
|  |   | |||
|  |  import (  | |||
|  |   "net/http"  | |||
|  |   "html/template"  | |||
|  |  )  | |||
|  |   | |||
|  |  type PAGE struct {  | |||
|  |   NAME string  | |||
|  |  }  | |||
|  |   | |||
|  |  var page PAGE  | |||
|  |   | |||
|  |  func main() {  | |||
|  |   page.NAME = "Mark"  | |||
|  |   http.HandleFunc("/", servePage)  | |||
|  |   http.ListenAndServe(":8080", nil)  | |||
|  |  }  | |||
|  |   | |||
|  |  func servePage(writer http.ResponseWriter, reqest *http.Request) {  | |||
|  |   template := template.New("sayHello")  | |||
|  |   template, _ = template.Parse("Hello {{.NAME}}!")  | |||
|  |   template.Execute(writer, page)  | |||
|  |  }  | |||
|  | ``` | |||
|  | 
 | |||
|  | Теперь запустите эту программу и перейдите в свой браузер, чтобы: | |||
|  | ``` | |||
|  | http://localhost:8080/  | |||
|  | ``` | |||
|  | 
 | |||
|  | Ответ будет следующим: | |||
|  | ``` | |||
|  | Hello Mark!  | |||
|  | ``` | |||
|  | 
 | |||
|  | Но как это работает и что делает код? Ну, прежде всего, мы импортируем пакет `net/http` , чтобы мы могли запускать веб-сервер. Затем мы импортируем пакет `html/template` . Это позволяет использовать функцию templating; и вот о чем эта статья. | |||
|  | 
 | |||
|  | Мы также создаем тип `PAGE` , который имеет одно поле под названием `NAME` как `string` типа. Мы также создаем глобальную переменную, называемую `page` типа `PAGE` , созданной нами структурой. В `main` функции мы даем поле `NAME` `page` значение `Mark` - мое имя, но не стесняйтесь использовать свое имя! | |||
|  | 
 | |||
|  | Функция `servePage` сначала немного сложна. Давайте разберемся: | |||
|  | 
 | |||
|  | ```go | |||
|  | func servePage(writer http.ResponseWriter, reqest *http.Request) {  | |||
|  |   | |||
|  |   // 1. Creating a template  | |||
|  |   template := template.New("sayHello")  | |||
|  |   | |||
|  |   // 2. Filling the template  | |||
|  |   template, _ = template.Parse("Hello {{.NAME}}!")  | |||
|  |   | |||
|  |   // 3. Executing the template  | |||
|  |   template.Execute(writer, page)  | |||
|  |  }  | |||
|  | ``` | |||
|  | 
 | |||
|  | Что мы здесь делаем? Давайте посмотрим шаг за шагом: | |||
|  | 
 | |||
|  | 1.  Мы создаем _шаблон_ . Вам нужно ввести имя, но на самом деле не важно, какое имя вы выберете. Здесь я выбрал `sayHello` . | |||
|  | 2.  Затем мы заполняем шаблон некоторым текстом. Обратите внимание на `{{.NAME}}` . | |||
|  | 3.  Наконец, мы _выполняем_ шаблон. Это означает, что шаблон заполняется и отправляется клиенту. | |||
|  | 
 | |||
|  | Но как мы переходим от `{{.NAME}}` к `Mark` ? Ну, помните, мы использовали переменную `page` в качестве параметра для метода `Execute` ? Этот метод просматривает данные в шаблоне и видит `{{.NAME}}` . `.NAME` указывает на то, что он должен выглядеть на поле с именем `NAME` внутри переменной , которая была задана в качестве параметра при `Execute` называется. В этом случае он находит это поле и принимает к сведению, что это значение - `Mark` . `{{` И `}}` сообщают `Execute` что он должен заменить `{{.NAME}}` на найденное значение. Итак, конечным результатом станет `Hello Mark!` , | |||
|  | 
 | |||
|  | Вы можете иметь несколько полей и несколько `{{.XXX}}` . Это очень простой способ вставить данные в ответы, и теперь вы знаете, как создавать шаблоны в Go! |