package main import ( "bytes" "fmt" "html/template" "net/http" ) type greetPage struct { Name string } const greetText = ` Hello

Hello, {{.Name}}!

` var greetTemplate = template.Must(template.New("greet").Parse(greetText)) func handleGreet(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("name") if name == "" { http.Error(w, "Please give a name.", http.StatusBadRequest) return } var page bytes.Buffer err := greetTemplate.Execute(&page, greetPage{Name: name}) 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 /greet", handleGreet) 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) } }