Quando você está criando um site, normalmente gera parte do seu conteúdo final dinamicamente. Em seguida, você desejará injetar esses dados em suas páginas da Web finais para exibição em um navegador.
Você pode adotar uma das duas abordagens: incorporar sua estrutura de página em seu programa ou combinar seus dados finais com arquivos de modelo separados.
A modelagem fornece separação de interesses para uma base de código mais sustentável. Também facilita a divisão de tarefas de front-end e tarefas de back-end, alocando-as a diferentes membros da equipe. Go tem excelente suporte a templates em sua biblioteca padrão.
Introdução ao modelo em Go
Go tem dois pacotes de templates na biblioteca padrão: texto/modelo e html/modelo. O pacote text/template tem funcionalidade para analisar arquivos de texto, enquanto html/template lida com HTML. Ao usar o html/template, você está protegido contra ataques de scripts entre sites (XSS), pois o Go escapa da entrada de dados durante a renderização. Essa é outra vantagem do modelo sobre uma abordagem manual.
Como o pacote de modelos faz parte da biblioteca padrão, você não precisará instalar nenhuma dependência; basta importar:
importar "html/modelo"
Começar por criando um arquivo HTML para usar como modelo para seu aplicativo. Você pode usar o padrão .html extensão ou qualquer .gohtml ou .tmpl, ambos são que também são comuns. Qualquer que seja a extensão que você usar, a funcionalidade em seu aplicativo será a mesma. Alguns editores de texto podem aplicar diferentes realces de sintaxe dependendo das extensões dos seus modelos. Aqui está um esqueleto básico:
<!DOCTYPE html>
<html lang="pt">
<cabeça>
<metacharset="UTF-8">
<título>Documento</title>
</head>
<corpo>
</body>
</html>
Salve este arquivo no diretório do seu programa Go. Agora você pode começar a trabalhar com ele, como um modelo, dentro do seu programa.
Crie uma instância global do Modelo método do pacote de modelo. Você acessará esta instância de modelo de várias partes do seu programa.
var tmplt *modelo. Modelo
Você terá que criar um servidor simples para renderizar e exibir seus modelos. Veja como iniciar um servidor simples em Go usando o net/http pacote:
funçãorunServer() {
http. HandleFunc("/home", handlePage)
erro := http. ListenAndServe("localhost:8080", nada)
E se err!= nada {
registro. Fatalln("Ocorreu um erro com o servidor:", err)
}
}
Você vai ligar para runServer função de sua função principal para iniciar o servidor. O servidor tem apenas uma rota, a /home rota, que exibirá sua página. o handlePage parâmetro é o nome de uma função de manipulador que renderizará sua página. o Ouvir e servir método inicia o servidor escutando na porta 8080 sobre localhost, ou seja, seu próprio computador.
Passando Variáveis para Modelos
Crie uma estrutura global chamada Notícia:
modelo Notícia estrutura {
Título corda
Corpo corda
}
Você usará essa estrutura para armazenar dados e passá-los para seu modelo para exibição em sua página final. Em seu modelo, você pode usar esta sintaxe para injetar dados:
{{ nome }}
Onde nome é o nome de uma variável que você passou para o seu modelo. Ao renderizar o modelo, ele substituirá os valores entre chaves pelos dados correspondentes do seu código Go. Como o exemplo a seguir passará uma estrutura, você usará a notação de ponto para acessar seus campos:
<corpo>
<h1>{{ .Título }}</h1>
<p> {{ .Corpo }} </p>
</body>
Substitua o elemento de corpo vazio na marcação de esqueleto do seu modelo pelo código acima.
o handlePage A função handler verificará se a solicitação para a página é uma solicitação GET. Em seguida, ele preenche uma estrutura com dados de amostra antes de renderizar o modelo e exibir a página final:
funçãohandlePage(escritor http. ResponseWriter, solicite *http. Solicitar) {
E se solicitar. Método == "GET" {
tmplt, _ = modelo. ParseFiles("tutorial.html")evento := notícias{
Título: "makeuseof.com tem tudo Tech",
Corpo: "Visite MUO por qualquer coisa relacionada a tecnologia",
}erro := tmplt. Executar (escritor, evento)
E se err!= nada {
Retorna
}
}
}
o ParseFiles O método analisa o arquivo HTML que você especifica. o evento variável é a estrutura inicializada. o Executar O método injetará os dados fornecidos na página final, de acordo com os espaços reservados no modelo. Executar leva um Escritor de respostas e os dados, neste caso, a estrutura.
Aqui está o resultado de executar o servidor e visitar a página:
Usando estruturas de controle em modelos
Você também pode usar estruturas de controle como instruções condicionais e loops em seus modelos.
Um loop permite que você produza vários valores e reutilize a mesma estrutura para cada um. Use o variar palavra-chave para definir o início do conteúdo repetido e o fim palavra-chave para o fim. Dentro do loop, você pode usar o {{.}} sintaxe para injetar o valor atual:
{{variar .}}
- {{.}}
{{fim}}
Em seguida, você passará o nome da estrutura de dados que deseja percorrer como parâmetro para o método Execute:
makeUseOfCategories := []corda{"Tecnologia explicada", "Programação", "Linux",
"Android", "iOS", "Muitos mais..."}erro := tmplt. Executar (escritor, makeUseOfCategories)
E se err!= nada {
Retorna
}
o makeUseOfCategories variável é uma fatia de strings para passar como parâmetro de dados. Aqui está o resultado do loop pela fatia:
Você pode usar uma instrução condicional em seus modelos para testar o valor de uma variável booleana. Crie um struct com campos booleanos, assim:
modelo TrueFalser estrutura {
É verdade bool
É falso bool
É padrão bool
}
Para usar uma condicional, inclua o E se palavra-chave entre chaves duplas antes do nome da variável a ser testada. Termine o bloco condicional com o fim palavra-chave entre chaves:
{{if .IsTrue}}
<p>Avalia verdadeiro e produzirá</p>
{{fim}}{{if .IsDefault}}
<p>Avalia falso e ganhou't saída</p>
{{fim}}
{{if .IsFalse}}
<p>Avalia falso e ganhou't saída</p>
{{fim}}
Inicializar uma estrutura em Go define os valores como false no padrão, portanto, se você não inicializar um campo, ele será avaliado como false. Ao inicializar a estrutura e passar a variável como os dados para o modelo, apenas os campos avaliados como verdadeiros fazem com que a saída apareça.
escolha := TrueFalser {
É verdade: verdadeiro,
É falso: falso,
}
erro := tmplt. Executar (escritor, escolha)
A saída final inclui apenas um único parágrafo, pois apenas o campo isTrue é avaliado como true:
Você não precisa usar modelos para seus aplicativos de back-end
A modelagem não é um requisito para seus aplicativos Go. Você pode usar outras abordagens, como incorporar sua estrutura de página em seu programa, juntamente com sua lógica e outros comportamentos.
No entanto, você acabará fazendo mais trabalho para si mesmo. A modelagem Go ajuda a evitar ataques XSS e facilita a separação do trabalho na estrutura da página da lógica de back-end.