Skip to content

Commit 78680cc

Browse files
diminuição da redundancia isolando a função template
1 parent 2e5cf21 commit 78680cc

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

wiki.go

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@ type Pagina struct {
1313
Corpo []byte
1414
}
1515

16+
// Observe que usamos quase exatamente o mesmo código de template em ambos os Handlers(view e edit).
17+
// Vamos remover essa duplicação movendo o código de template para sua própria função
18+
19+
// Ela possui 3 parametros, ResponseWriter, tmpl que é uma string e um ponteiro para o struct Pagina
20+
// O parseFiles vem pra função usando o segundo parametro como argumento e concatena com .html
21+
// e então executa a função assim como faziamos nos Handler.
22+
23+
func renderizaTemplate(escrever http.ResponseWriter, tmpl string, pagina *Pagina) {
24+
template, _ := template.ParseFiles(tmpl + ".html")
25+
template.Execute(escrever, pagina)
26+
}
27+
1628
// salvar persiste os dados da página
1729
func (p *Pagina) salvar() error {
1830
nomeDoArquivo := p.Titulo + ".txt"
@@ -29,28 +41,27 @@ func carregaPagina(titulo string) (*Pagina, error) {
2941
return &Pagina{Titulo: titulo, Corpo: corpo}, nil
3042
}
3143

32-
// Já que estamos trabalhando com templates agora, vamos criar um template para o nosso viewHandler
33-
// Verifique o arquiv view.html
34-
35-
// Modifique viewHandler de acordo:
44+
// E modifique os Handlers para usar essa função
3645

37-
// viewHandler escreve o titulo e corpo da pagina em html formatado
46+
// viewHandler r o titulo e corpo da pagina em html formatado
3847
func viewHandler(escrever http.ResponseWriter, ler *http.Request) {
3948
titulo := ler.URL.Path[len("/view/"):]
4049
pagina, _ := carregaPagina(titulo)
41-
template, _ := template.ParseFiles("view.html")
42-
template.Execute(escrever, pagina)
50+
// Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância
51+
renderizaTemplate(escrever, "view", pagina)
4352
}
4453

54+
// E modifique os Handlers para usar essa função
55+
4556
// editHandler carrega um formulário de edição
4657
func editHandler(escrever http.ResponseWriter, ler *http.Request) {
4758
titulo := ler.URL.Path[len("/edit/"):]
4859
pagina, err := carregaPagina(titulo)
4960
if err != nil {
5061
pagina = &Pagina{Titulo: titulo}
5162
}
52-
template, _ := template.ParseFiles("edit.html")
53-
template.Execute(escrever, pagina)
63+
// Agora só precisamos chamar a função com os parametros exigidos diminuindo a redundância
64+
renderizaTemplate(escrever, "edit", pagina)
5465
}
5566

5667
func main() {
@@ -59,3 +70,11 @@ func main() {
5970
// http.HandleFunc("/save/", saveHandler)
6071
log.Fatal(http.ListenAndServe(":8080", nil))
6172
}
73+
74+
// Se comentarmos o registro do nosso saveHandler não implementado, podemos buildar e
75+
// testar nosso programa mais uma vez.
76+
77+
// // $ go build wiki.go
78+
// // $ ./wiki
79+
80+
// e na porta 8080 de localhost podemos mudar o path no browser entre view e edit

0 commit comments

Comments
 (0)