doc/articles/wiki/part3.go - ActiveState ActiveGo 1.8
...

Source file doc/articles/wiki/part3.go

     1	// Copyright 2010 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package main
     6	
     7	import (
     8		"html/template"
     9		"io/ioutil"
    10		"net/http"
    11	)
    12	
    13	type Page struct {
    14		Title string
    15		Body  []byte
    16	}
    17	
    18	func (p *Page) save() error {
    19		filename := p.Title + ".txt"
    20		return ioutil.WriteFile(filename, p.Body, 0600)
    21	}
    22	
    23	func loadPage(title string) (*Page, error) {
    24		filename := title + ".txt"
    25		body, err := ioutil.ReadFile(filename)
    26		if err != nil {
    27			return nil, err
    28		}
    29		return &Page{Title: title, Body: body}, nil
    30	}
    31	
    32	func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
    33		t, _ := template.ParseFiles(tmpl + ".html")
    34		t.Execute(w, p)
    35	}
    36	
    37	func viewHandler(w http.ResponseWriter, r *http.Request) {
    38		title := r.URL.Path[len("/view/"):]
    39		p, _ := loadPage(title)
    40		renderTemplate(w, "view", p)
    41	}
    42	
    43	func editHandler(w http.ResponseWriter, r *http.Request) {
    44		title := r.URL.Path[len("/edit/"):]
    45		p, err := loadPage(title)
    46		if err != nil {
    47			p = &Page{Title: title}
    48		}
    49		renderTemplate(w, "edit", p)
    50	}
    51	
    52	func main() {
    53		http.HandleFunc("/view/", viewHandler)
    54		http.HandleFunc("/edit/", editHandler)
    55		//http.HandleFunc("/save/", saveHandler)
    56		http.ListenAndServe(":8080", nil)
    57	}
    58	

View as plain text