package main import ( "fmt" "net/http" "os" "path/filepath" "strings" "text/template" ) func Game(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } tmpl, err := template.ParseFiles("templates/D.html") if err != nil { http.Error(w, fmt.Sprintf("Error parsing template: %v", err), http.StatusInternalServerError) return } err = tmpl.Execute(w, nil) if err != nil { http.Error(w, fmt.Sprintf("Error executing template: %v", err), http.StatusInternalServerError) return } } func StaticFileHandler(w http.ResponseWriter, r *http.Request) { path := strings.TrimPrefix(r.URL.Path, "/") templatesPath := filepath.Join("templates", path) if fileExists(templatesPath) { http.ServeFile(w, r, templatesPath) return } http.NotFound(w, r) } func fileExists(path string) bool { info, err := os.Stat(path) if os.IsNotExist(err) { return false } return !info.IsDir() } func main() { http.HandleFunc("/", Game) http.HandleFunc("/D.icon.png", StaticFileHandler) http.HandleFunc("/D.apple-touch-icon.png", StaticFileHandler) http.HandleFunc("/D.png", StaticFileHandler) http.HandleFunc("/D.js", StaticFileHandler) http.HandleFunc("/D.pck", StaticFileHandler) http.HandleFunc("/D.wasm", StaticFileHandler) http.HandleFunc("/D.audio.position.worklet.js", StaticFileHandler) http.HandleFunc("/D.audio.worklet.js", StaticFileHandler) http.HandleFunc("/templates/", func(w http.ResponseWriter, r *http.Request) { path := strings.TrimPrefix(r.URL.Path, "/templates/") templatesPath := filepath.Join("templates", path) if fileExists(templatesPath) { http.ServeFile(w, r, templatesPath) return } http.NotFound(w, r) }) port := ":8181" fmt.Printf("Starting Go server on http://localhost%s\n", port) fmt.Printf("Open http://localhost%s in your browser\n", port) fmt.Printf("Serving files directly from templates directory\n") if err := http.ListenAndServe(port, nil); err != nil { fmt.Printf("Server error: %v\n", err) } }