2.8 KiB
title | localeTitle |
---|---|
Using templates with your web server | Usando modelos com seu servidor da web |
Quando você tem um servidor da Web, talvez queira inserir dados em suas respostas. Vamos ver algum código:
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)
}
Agora inicie este programa e navegue em seu navegador para:
http://localhost:8080/
A resposta será:
Hello Mark!
Mas como isso funciona e o que o código faz? Bem, em primeiro lugar, importamos o pacote net/http
para que possamos executar um servidor web. Em seguida, importamos o pacote html/template
. Isso habilita um recurso chamado de template; e é aí que este artigo é sobre.
Também criamos um tipo chamado PAGE
, que possui um campo chamado NAME
como string
tipo. Também criamos uma variável global chamada page
do tipo PAGE
, a estrutura que acabamos de criar. Na função main
, damos ao campo NAME
da page
um valor de Mark
- meu nome, mas fique à vontade para usar seu próprio nome!
A função servePage
é um pouco difícil no começo. Vamos desmontar:
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)
}
O que fazemos aqui? Vamos ver passo a passo:
- Nós criamos um modelo . Você precisa digitar um nome, mas não importa qual nome você escolher. Aqui eu escolhi dizer
sayHello
. - Em seguida, preenchemos o modelo com algum texto. Por favor, tome nota do
{{.NAME}}
. - Finalmente, nós executamos o modelo. Isso significa que o modelo é preenchido e enviado ao cliente.
Mas como vamos de {{.NAME}}
para Mark
? Bem, lembre-se que usamos a variável de page
como um parâmetro para o método Execute
? Este método analisa os dados no modelo e vê {{.NAME}}
. O .NAME
indica que ele deve procurar por um campo chamado NAME
dentro da variável que foi especificada como um parâmetro quando Execute
foi chamado. Nesse caso, ele encontra esse campo e toma nota de que o valor é Mark
. O {{
e }}
estão dizendo Execute
que ele deve substituir {{.NAME}}
pelo valor encontrado. Então o resultado final se tornará Hello Mark!
.
Você pode ter vários campos e vários {{.XXX}}
. Essa é uma maneira muito fácil de inserir dados em respostas e agora você sabe como modelar no Go!