package main import ( "context" "errors" "html/template" "log" "net/http" "os" "os/signal" "sophuwu.site/myweb/config" ) var Tplt *template.Template func ParseTemplates() { Tplt = template.Must(template.ParseGlob(config.Templates)) } func HttpIndex(w http.ResponseWriter, r *http.Request) { data := make(map[string]string) data["Title"] = config.Name data["Description"] = "Blogs and projects by " + config.Name + "." data["Url"] = config.URL + r.URL.Path data["Email"] = config.Email data["Name"] = config.Name if err := Tplt.ExecuteTemplate(w, "index", data); err != nil { log.Println(err) return } } func HttpFS(path, fspath string) { http.Handle(path, http.StripPrefix(path, http.FileServer(http.Dir(fspath)))) } func main() { ParseTemplates() http.HandleFunc("/", HttpIndex) HttpFS("/static/", config.StaticPath) HttpFS("/media/", config.MediaPath) server := http.Server{Addr: config.ListenAddr, Handler: nil} go func() { err := server.ListenAndServe() if err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatalf("Error starting server: %v", err) } }() sigchan := make(chan os.Signal) signal.Notify(sigchan) s := <-sigchan println("stopping: got signal", s.String()) server.Shutdown(context.Background()) println("stopped") }