Migrated project to use golang.

This commit is contained in:
2026-04-14 08:08:54 +02:00
parent 44fb025c81
commit dbf7858afd
18 changed files with 762 additions and 906 deletions
+12
View File
@@ -0,0 +1,12 @@
package handlers
import "net/http"
type HomeData struct {
Title string
}
func Home(w http.ResponseWriter, r *http.Request) {
data := HomeData{Title: "Home"}
view(w, r, "home", data)
}
+32
View File
@@ -0,0 +1,32 @@
package handlers
import (
"html/template"
"net/http"
"path/filepath"
)
// Renders a full page by combining the base template with a page template
// Parsed together so the page can define blocks needed for base template
func render(w http.ResponseWriter, _ *http.Request, page string, data any) {
files := []string{
filepath.Join("internal", "templates", "layouts", "base.html"),
filepath.Join("internal", "templates", "pages", page+".html"),
}
tmpl, err := template.ParseFiles(files...)
if err != nil {
http.Error(w, "template error: " + err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "text/html")
if err := tmpl.ExecuteTemplate(w, "base", data); err != nil {
http.Error(w, "render error: " + err.Error(), http.StatusInternalServerError)
}
}
func view(w http.ResponseWriter, r *http.Request, page string, data any) {
render(w, r, page, data)
}
+33
View File
@@ -0,0 +1,33 @@
{{define "base"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{.Title}}</title>
<link rel="stylesheet" href="/static/css/reset.css">
<link rel="stylesheet" href="/static/css/index.css">
<link rel="stylesheet" href="/static/js/index.js" defer>
</head>
<body>
<header>
<nav>
<a href="/">Home</a>
</nav>
</header>
<main>
{{template "content" .}}
</main>
<footer>
<p>&copy; <span id="year"></span></p>
</footer>
</body>
<script>
document.querySelector('#year').innerHTML = new Date().getFullYear();
</script>
</html>
{{end}}
+7
View File
@@ -0,0 +1,7 @@
{{define "content"}}
<section class="hero">
<h1>Hi, I'm Jason</h1>
<p>PHP &amp; Go developer. I build web applications and tools.</p>
<a href="https://codeberg.org/yourname" target="_blank" rel="noopener">Codeberg</a>
</section>
{{end}}