Build the Go Web Server
This simple code in "main.go" replaces both Apache/Nginx and PHP. The code below is the heart of the Go Web Server of this site. This code also dynamically handles endpoints and redirects.
package main import ( "html/template" "net/http" "strings" ) var tpl *template.Template func init() { tpl = template.Must(template.ParseGlob("public/tmpl/*.html")) http.Handle("/img/", http.StripPrefix("/img/", http.FileServer(http.Dir("./public/img")))) http.Handle("/css/", http.StripPrefix("/css/", http.FileServer(http.Dir("./public/css")))) http.Handle("/icn/", http.StripPrefix("/icn/", http.FileServer(http.Dir("./public/icn")))) http.Handle("/js/", http.StripPrefix("/js/", http.FileServer(http.Dir("./public/js")))) http.Handle("/mov/", http.StripPrefix("/mov/", http.FileServer(http.Dir("./public/mov")))) } func main() { http.HandleFunc("/", endpoint) http.Handle("/favicon.ico", http.NotFoundHandler()) //????????) http.ListenAndServe(":9091", nil) } func endpoint(w http.ResponseWriter, r *http.Request) { path := strings.Trim(r.URL.Path, "/") page := (path + ".html") switch path { case "contactme": contactme(w, r) case "": //empty url := geturl(path) w.Header().Add("Vary", "Accept-Encoding") w.Header().Set("Cache-Control", "max-age=3600") w.Header().Set("Access-Control-Allow-Origin", "*") tpl.ExecuteTemplate(w, "home.html", url) default: w.Header().Add("Vary", "Accept-Encoding") w.Header().Set("Cache-Control", "max-age=3600") w.Header().Set("Access-Control-Allow-Origin", "*") exist := tpl.Lookup(page) if exist == nil { redirect(w, r) // if not found -> redirect.go } url := geturl(path) tpl.ExecuteTemplate(w, page, url) } } func geturl(path string) string { //used for canonical path on each page switch path { case "": return ("https://static.go4webdev.org/") default: return ("https://static.go4webdev.org/" + path) } }