From ae0dcd1046d28c57c82359ab59ec8c3171eaea7c Mon Sep 17 00:00:00 2001 From: ds Date: Sun, 12 Jul 2026 17:48:36 +0000 Subject: [PATCH] =?UTF-8?q?microblog.go=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- microblog.go | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 microblog.go diff --git a/microblog.go b/microblog.go new file mode 100644 index 0000000..79503be --- /dev/null +++ b/microblog.go @@ -0,0 +1,106 @@ +/** + * microblog in go + * + * get goldmark md parser + * go get github.com/yuin/goldmark + **/ +package main + +import ( + "html/template" + "io/ioutil" + "net/http" + "os" + "path/filepath" + "strings" + + "github.com/yuin/goldmark" +) + +const articlesDir = "data/articles" + +func main() { + http.HandleFunc("/", handlePage) + println("Server läuft auf http://localhost:8080") + http.ListenAndServe(":8080", nil) +} + +func handlePage(w http.ResponseWriter, r *http.Request) { + path := r.URL.Path + if path == "/" { + path = "/index" + } + // Entferne führenden Slash + pagePath := strings.TrimPrefix(path, "/") + // Baue den Pfad zur Markdown-Datei + mdPath := filepath.Join(articlesDir, filepath.FromSlash(pagePath)+".md") + + // Überprüfe, ob die Datei existiert + if _, err := os.Stat(mdPath); os.IsNotExist(err) { + http.NotFound(w, r) + return + } + + // Datei lesen + data, err := ioutil.ReadFile(mdPath) + if err != nil { + http.Error(w, "Fehler beim Lesen der Seite", 500) + return + } + + // Markdown in HTML umwandeln mit Goldmark + htmlContent, err := markdownToHTML(data) + if err != nil { + http.Error(w, "Fehler bei der Konvertierung", 500) + return + } + + // Seiten-Titel aus Dateiname oder erster Überschrift (optional) + title := filepath.Base(pagePath) + title = strings.ReplaceAll(title, "_", " ") + title = strings.Title(title) + + // HTML-Template + tmpl := ` + + + + + + {{.Title}} + + + +

{{.Title}}

+
{{.Content}}
+

Startseite

+ + + ` + + t, err := template.New("page").Parse(tmpl) + if err != nil { + http.Error(w, "Template Fehler", 500) + return + } + + t.Execute(w, map[string]interface{}{ + "Title": title, + "Content": template.HTML(htmlContent), + }) +} + +// Funktion, um Markdown mit Goldmark in HTML umzuwandeln +func markdownToHTML(md []byte) ([]byte, error) { + var buf strings.Builder + mdParser := goldmark.New() + if err := mdParser.Convert(md, &buf); err != nil { + return nil, err + } + return []byte(buf.String()), nil +} \ No newline at end of file