@@ -13,6 +13,18 @@ type Pagina struct {
13
13
Corpo []byte
14
14
}
15
15
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
+
16
28
// salvar persiste os dados da página
17
29
func (p * Pagina ) salvar () error {
18
30
nomeDoArquivo := p .Titulo + ".txt"
@@ -29,28 +41,27 @@ func carregaPagina(titulo string) (*Pagina, error) {
29
41
return & Pagina {Titulo : titulo , Corpo : corpo }, nil
30
42
}
31
43
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
36
45
37
- // viewHandler escreve o titulo e corpo da pagina em html formatado
46
+ // viewHandler r o titulo e corpo da pagina em html formatado
38
47
func viewHandler (escrever http.ResponseWriter , ler * http.Request ) {
39
48
titulo := ler .URL .Path [len ("/view/" ):]
40
49
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 )
43
52
}
44
53
54
+ // E modifique os Handlers para usar essa função
55
+
45
56
// editHandler carrega um formulário de edição
46
57
func editHandler (escrever http.ResponseWriter , ler * http.Request ) {
47
58
titulo := ler .URL .Path [len ("/edit/" ):]
48
59
pagina , err := carregaPagina (titulo )
49
60
if err != nil {
50
61
pagina = & Pagina {Titulo : titulo }
51
62
}
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 )
54
65
}
55
66
56
67
func main () {
@@ -59,3 +70,11 @@ func main() {
59
70
// http.HandleFunc("/save/", saveHandler)
60
71
log .Fatal (http .ListenAndServe (":8080" , nil ))
61
72
}
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