package main
import (
"bytes"
"fmt"
"html/template"
"net/http"
)
type task struct {
Name string
Done bool
}
var tasks = []task{
{Name: "Install Go", Done: true},
{Name: "Write a server", Done: true},
{Name: "Finish this homework", Done: false},
}
const tasksText = `
Tasks
Tasks
{{range .}}
- {{.Name}}{{if .Done}} (done){{end}}
{{else}}
- Nothing to do.
{{end}}
`
var tasksTemplate = template.Must(template.New("tasks").Parse(tasksText))
func handleHome(w http.ResponseWriter, r *http.Request) {
var page bytes.Buffer
err := tasksTemplate.Execute(&page, tasks)
if err != nil {
fmt.Println("Template error:", err)
http.Error(w, "The page could not be built.", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "text/html; charset=utf-8")
page.WriteTo(w)
}
func main() {
http.HandleFunc("GET /{$}", handleHome)
fmt.Println("Server running at http://localhost:8080")
fmt.Println("Press Ctrl+C to stop it.")
err := http.ListenAndServe("localhost:8080", nil)
if err != nil {
fmt.Println("Server stopped:", err)
}
}