</p>
<pre>
-func viewHandler(w http.ResponseWriter, r *http.Request, title string) {
+func viewHandler(w http.ResponseWriter, r *http.Request) {
+ title, err := getTitle(w, r)
+ if err != nil {
+ return
+ }
p, err := loadPage(title)
if err != nil {
http.Redirect(w, r, "/edit/"+title, http.StatusFound)
</p>
<pre>
-func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
+func saveHandler(w http.ResponseWriter, r *http.Request) {
+ title, err := getTitle(w, r)
+ if err != nil {
+ return
+ }
body := r.FormValue("body")
p := &Page{Title: title, Body: []byte(body)}
- err := p.save()
+ err = p.save()
if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError)
return
</p>
<pre>
+var titleValidator = regexp.MustCompile("^[a-zA-Z0-9]+$")
</pre>
<p>
</p>
<pre>
-!./srcextract.bin -src=final.go -name=viewHandler
+!./srcextract.bin -src=final-noclosure.go -name=viewHandler
</pre>
<p>
</p>
<pre>
-!./srcextract.bin -src=final.go -name=saveHandler
+!./srcextract.bin -src=final-noclosure.go -name=saveHandler
</pre>
<p>
</p>
<pre>
-!./srcextract.bin -src=final-noclosure.go -name=TitleValidator
+!./srcextract.bin -src=final-noclosure.go -name=titleValidator
</pre>
<p>