package main import ( "fmt" "html/template" "net/http" "os" "strings" ) //Page : Is exported to PostCollection type Page struct { Title string MenuItems []string Posts []Post } var name = "takunomi" var posts []Post var sections = []string{"about", "past", "contact"} var templates = template.Must(template.ParseFiles("blog.tmpl", "blog_roll.tmpl", "style.tmpl", "post.tmpl")) func main() { NewPostsCollection() http.HandleFunc("/", blogHandler) http.HandleFunc("/post/", postHandler) if os.Args[1] == "local" { http.ListenAndServe(":8080", nil) } if os.Args[1] == "ext" { http.ListenAndServe(":35291", nil) } } func errorHandler(w http.ResponseWriter, req *http.Request, status int) { w.WriteHeader(status) if status == http.StatusNotFound { fmt.Fprint(w, "custom 404") } } func blogHandler(w http.ResponseWriter, req *http.Request) { if req.URL.Path != "/" { errorHandler(w, req, http.StatusNotFound) return } posts = getNewestPosts(3) page := Page{name, sections, posts} renderTemplates(w, page) } func postHandler(w http.ResponseWriter, r *http.Request) { title := strings.TrimPrefix(r.URL.Path, "/post/") posts := []Post{getPostByURLTitle(title)} page := Page{name, sections, posts} renderTemplates(w, page) } func renderTemplates(w http.ResponseWriter, p Page) { s1 := templates.Lookup("blog.tmpl") s1.ExecuteTemplate(w, "blog", p) s2 := templates.Lookup("blog_roll.tmpl") s2.ExecuteTemplate(w, "blog_roll", nil) s3 := templates.Lookup("post.tmpl") s3.ExecuteTemplate(w, "post", nil) }