So erstellen Sie einen statischen Site-Generator mit Go
Statische Site-Generatoren sind leistungsstarke Tools, die die Erstellung schlanker, schneller und skalierbarer Websites vereinfachen. Egal, ob Sie Blogs, Dokumentationen oder Websites für kleine Unternehmen erstellen, sie wandeln in Markdown geschriebene Inhalte in effiziente, statische HTML-Dateien um.
In diesem Leitfaden erstellen wir einen Static Site Generator (SSG) in Go, einer Programmiersprache, die für ihre Leistung, Einfachheit und Parallelität bekannt ist. Wir erstellen ein CLI-Tool, das Markdown-Dateien als Eingabe verwendet, sie mithilfe einer vordefinierten HTML-Vorlage verarbeitet und schöne, statische HTML-Seiten ausgibt.
Warum das bauen?
Ein statischer Site-Generator kann mehreren praktischen Zwecken dienen:
- Dokumentationsseiten: Generieren Sie schnell ladende Websites für die technische Dokumentation.
- Blogs: Schreiben Sie Ihre Inhalte in Markdown und stellen Sie sie mühelos bereit.
- Prototyping: Erstellen Sie schnell statische Websites für kleine Projekte oder Präsentationen.
Warum Go für dieses Projekt verwenden?
- Geschwindigkeit: Go kompiliert mit nativem Maschinencode und macht Tools wie dieses unglaublich schnell.
- Parallelität: Go erleichtert die gleichzeitige Verarbeitung mehrerer Dateien.
- Einfachheit: Die Syntax von Go ist minimal und die Erstellung von CLI-Tools ist unkompliziert.
Es hat mir viel Spaß gemacht, dieses Projekt zu erstellen :)
Projekt-Setup
Bevor wir uns mit dem Code befassen, skizzieren wir die Struktur des Projekts:
static-site-generator/ ├── cmd/ │ └── ssg/ │ └── main.go # Entry point ├── internal/ │ ├── generator/ │ │ └── html.go # HTML generation logic │ ├── parser/ │ │ ├── frontmatter.go # YAML frontmatter parsing │ │ └── markdown.go # Markdown processing │ └── watcher/ │ └── watcher.go # File change detection ├── templates/ │ └── default.html # HTML template ├── content/ # Markdown files └── output/
Wenn Sie von Grund auf neu erstellen möchten, führen Sie diesen Befehl aus, um ein Go-Modul für das Projekt zu initialisieren
go mod init
Hauptmerkmale:
Markdown in HTML konvertieren?
YAML-Frontmatter für das Parsen von Metadaten
HTML-Vorlagen für anpassbare Ausgabe
Dateiänderungserkennung in Echtzeit mit einem Watcher ?
Aufbau des Projekts
1. Klonen Sie das Repository
Bevor Sie beginnen, klonen Sie das Repository auf Ihren lokalen Computer:
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
Tabintel
/
Static-Site-Generator
Statischer Site-Generator
Ein schneller und einfacher statischer Site-Generator, geschrieben in Go.
Dadurch erhalten Sie alle Starterdateien und die Projektstruktur, die zum Erstellen und Ausführen des SSG erforderlich sind.
2. Markdown-Parser
Der Markdown-Parser übernimmt die Konvertierung von .md-Dateien in HTML-Inhalte. Es ermöglicht auch erweiterte Funktionen wie automatische Überschriften-IDs.
internal/parser/markdown.go
static-site-generator/ ├── cmd/ │ └── ssg/ │ └── main.go # Entry point ├── internal/ │ ├── generator/ │ │ └── html.go # HTML generation logic │ ├── parser/ │ │ ├── frontmatter.go # YAML frontmatter parsing │ │ └── markdown.go # Markdown processing │ └── watcher/ │ └── watcher.go # File change detection ├── templates/ │ └── default.html # HTML template ├── content/ # Markdown files └── output/
✨Konvertiert Markdown-Inhalte in das HTML-Format mit erweiterter Funktionsunterstützung.
3. Frontmatter-Parser
Der Frontmatter-Parser extrahiert Metadaten wie Titel, Datum, Tags und Beschreibung aus Markdown-Dateien.
internal/parser/frontmatter.go
go mod init
? Extrahiert und gibt Metadaten zusammen mit dem Inhalt der Markdown-Datei zurück.
4. HTML-Generator
Der HTML-Generator verwendet das HTML/Template-Paket von Go, um statische HTML-Seiten basierend auf einer Vorlage zu erstellen.
internal/generator/html.go
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
? Erzeugt HTML-Dateien aus Vorlagen und geparsten Markdown-Inhalten.
5. Dateibeobachter
Unser Watcher überwacht den Inhalt/das Verzeichnis auf Änderungen und löst automatisch Neuerstellungen aus.
Dies wird mit https://github.com/fsnotify/fsnotify erstellt
internal/watcher/watcher.go
package parser import ( "github.com/gomarkdown/markdown" "github.com/gomarkdown/markdown/parser" ) type MarkdownContent struct { Content string Title string Date string Tags []string HTMLOutput string } func ParseMarkdown(content []byte) *MarkdownContent { extensions := parser.CommonExtensions | parser.AutoHeadingIDs parser := parser.NewWithExtensions(extensions) html := markdown.ToHTML(content, parser, nil) return &MarkdownContent{ Content: string(content), HTMLOutput: string(html), } }
? Erkennt Dateiänderungen und automatisiert die Neugenerierung statischer Dateien.
6. Hauptanwendung
Der Einstiegspunkt verbindet alle Komponenten miteinander und bietet CLI-Optionen zur Anpassung.
cmd/ssg/main.go
package parser import ( "bytes" "gopkg.in/yaml.v2" ) type Frontmatter struct { Title string `yaml:"title"` Date string `yaml:"date"` Tags []string `yaml:"tags"` Description string `yaml:"description"` } func ParseFrontmatter(content []byte) (*Frontmatter, []byte, error) { parts := bytes.Split(content, []byte("---")) if len(parts) < 3 { return nil, content, nil } var meta Frontmatter err := yaml.Unmarshal(parts[1], &meta) if err != nil { return nil, content, err } return &meta, bytes.Join(parts[2:], []byte("---")), nil }
Verwendung
Bevor Sie die App ausführen, erstellen Sie eine Markdown-Datei mit .md und speichern Sie sie im Inhaltsverzeichnis
Dann starten Sie den Generator:
package generator import ( "html/template" "os" "path/filepath" ) type Generator struct { TemplateDir string OutputDir string } func NewGenerator(templateDir, outputDir string) *Generator { return &Generator{ TemplateDir: templateDir, OutputDir: outputDir, } } func (g *Generator) Generate(data interface{}, outputFile string) error { if err := os.MkdirAll(g.OutputDir, 0755); err != nil { return err } tmpl, err := template.ParseFiles(filepath.Join(g.TemplateDir, "default.html")) if err != nil { return err } out, err := os.Create(filepath.Join(g.OutputDir, outputFile)) if err != nil { return err } defer out.Close() return tmpl.Execute(out, data) }
Es konvertiert die Markdown-Datei in eine HTML-Datei und speichert sie im Ausgabeverzeichnis
Wie Sie sehen können, werden Formatierungen hinzugefügt, um es optisch ansprechend zu gestalten :)
Achten Sie auf Änderungen
Beobachter aktivieren:
package watcher import ( "fmt" "github.com/fsnotify/fsnotify" "log" "os" "path/filepath" ) type ProcessFn func() error func Watch(dir string, process ProcessFn) error { watcher, err := fsnotify.NewWatcher() if err != nil { return err } defer watcher.Close() done := make(chan bool) go func() { for { select { case event, ok := <-watcher.Events: if !ok { return } if event.Op&fsnotify.Write == fsnotify.Write { fmt.Printf("Modified file: %s\n", event.Name) if err := process(); err != nil { log.Printf("Error processing: %v\n", err) } } case err, ok := <-watcher.Errors: if !ok { return } log.Printf("Error: %v\n", err) } } }() err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { return watcher.Add(path) } return nil }) if err != nil { return err } <-done return nil }
Und das ist es!
Diese SSG konvertiert Markdown in sauberes HTML, überwacht Änderungen und sorgt für die Organisation Ihrer Inhalte. Schreiben Sie einen Kommentar, wenn Sie damit etwas bauen – ich würde gerne sehen, was Sie schaffen!
Fanden Sie das hilfreich? Sie können mir einen Kaffee spendieren, um weitere Go-Tutorials zu unterstützen! ☕
Viel Spaß beim Codieren! ?
Tabintel
/
Static-Site-Generator
Statischer Site-Generator
Ein schneller und einfacher statischer Site-Generator, geschrieben in Go.
Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen statischen Site-Generator mit Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

OpenSSL bietet als Open -Source -Bibliothek, die in der sicheren Kommunikation weit verbreitet sind, Verschlüsselungsalgorithmen, Tasten und Zertifikatverwaltungsfunktionen. In seiner historischen Version sind jedoch einige Sicherheitslücken bekannt, von denen einige äußerst schädlich sind. Dieser Artikel konzentriert sich auf gemeinsame Schwachstellen und Antwortmaßnahmen für OpenSSL in Debian -Systemen. DebianopensL Bekannte Schwachstellen: OpenSSL hat mehrere schwerwiegende Schwachstellen erlebt, wie z. Ein Angreifer kann diese Sicherheitsanfälligkeit für nicht autorisierte Lesen sensibler Informationen auf dem Server verwenden, einschließlich Verschlüsselungsschlüssel usw.

Wie kann man im Beegoorm -Framework die mit dem Modell zugeordnete Datenbank angeben? In vielen BeEGO -Projekten müssen mehrere Datenbanken gleichzeitig betrieben werden. Bei Verwendung von BeEGO ...

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

In diesem Artikel wird vorgestellt, wie MongoDB im Debian -System konfiguriert wird, um eine automatische Expansion zu erzielen. Die Hauptschritte umfassen das Einrichten der MongoDB -Replikat -Set und die Überwachung des Speicherplatzes. 1. MongoDB Installation Erstens stellen Sie sicher, dass MongoDB im Debian -System installiert ist. Installieren Sie den folgenden Befehl: sudoaptupdatesudoaptinstall-emongoDB-org 2. Konfigurieren von MongoDB Replika-Set MongoDB Replikate sorgt für eine hohe Verfügbarkeit und Datenreduktion, was die Grundlage für die Erreichung der automatischen Kapazitätserweiterung darstellt. Start MongoDB Service: SudosystemctlstartMongodsudosysys
