From 78680cc309f22e371d26a54f04a2720a010a72d8 Mon Sep 17 00:00:00 2001 From: Wagner Abrantes Date: Mon, 10 Aug 2020 22:07:09 -0300 Subject: [PATCH] =?UTF-8?q?diminui=C3=A7=C3=A3o=20da=20redundancia=20isola?= =?UTF-8?q?ndo=20a=20fun=C3=A7=C3=A3o=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wiki.go | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/wiki.go b/wiki.go index 722cd13..e4c3a8f 100644 --- a/wiki.go +++ b/wiki.go @@ -13,6 +13,18 @@ type Pagina struct { Corpo []byte } +// Observe que usamos quase exatamente o mesmo código de template em ambos os Handlers(view e edit). +// Vamos remover essa duplicação movendo o código de template para sua própria função + +// Ela possui 3 parametros, ResponseWriter, tmpl que é uma string e um ponteiro para o struct Pagina +// O parseFiles vem pra função usando o segundo parametro como argumento e concatena com .html +// e então executa a função assim como faziamos nos Handler. + +func renderizaTemplate(escrever http.ResponseWriter, tmpl string, pagina *Pagina) { + template, _ := template.ParseFiles(tmpl + ".html") + template.Execute(escrever, pagina) +} + // salvar persiste os dados da página func (p *Pagina) salvar() error { nomeDoArquivo := p.Titulo + ".txt" @@ -29,19 +41,18 @@ func carregaPagina(titulo string) (*Pagina, error) { return &Pagina{Titulo: titulo, Corpo: corpo}, nil } -// Já que estamos trabalhando com templates agora, vamos criar um template para o nosso viewHandler -// Verifique o arquiv view.html - -// Modifique viewHandler de acordo: +// E modifique os Handlers para usar essa função -// viewHandler escreve o titulo e corpo da pagina em html formatado +// viewHandler r o titulo e corpo da pagina em html formatado func viewHandler(escrever http.ResponseWriter, ler *http.Request) { titulo := ler.URL.Path[len("/view/"):] pagina, _ := carregaPagina(titulo) - template, _ := template.ParseFiles("view.html") - template.Execute(escrever, pagina) + // Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância + renderizaTemplate(escrever, "view", pagina) } +// E modifique os Handlers para usar essa função + // editHandler carrega um formulário de edição func editHandler(escrever http.ResponseWriter, ler *http.Request) { titulo := ler.URL.Path[len("/edit/"):] @@ -49,8 +60,8 @@ func editHandler(escrever http.ResponseWriter, ler *http.Request) { if err != nil { pagina = &Pagina{Titulo: titulo} } - template, _ := template.ParseFiles("edit.html") - template.Execute(escrever, pagina) + // Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância + renderizaTemplate(escrever, "edit", pagina) } func main() { @@ -59,3 +70,11 @@ func main() { // http.HandleFunc("/save/", saveHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } + +// Se comentarmos o registro do nosso saveHandler não implementado, podemos buildar e +// testar nosso programa mais uma vez. + +// // $ go build wiki.go +// // $ ./wiki + +// e na porta 8080 de localhost podemos mudar o path no browser entre view e edit