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! |