package main import ( "html/template" "net/http" _ "embed" ) // Struct to hold data to be passed to the template type PageData struct { Title string Name string } //go:embed views/index.html var tmpl string //go:embed views/style.css var style string //go:embed htmx.min.js var htmx string func main() { // Parse the template from the string literal t := template.Must(template.New("webpage").Parse(tmpl)) // Handler for the root URL http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { data := PageData{ Title: "Hello Page", } // Check if a name is provided via the form if r.Method == http.MethodPost { data.Name = r.FormValue("name") } // Execute the template, passing in the data t.Execute(w, data) }) http.HandleFunc("/style.css", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/css") w.Write([]byte(style)) }) http.HandleFunc("/htmx.min.js", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/javascript") w.Write([]byte(htmx)) }) // Start the server on port 8080 println("Listening on http://localhost:8080") if err := http.ListenAndServe(":8080", nil); err != nil { panic(err) } }