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) <hr> <h2> Verwendung </h2> <p>Bevor Sie die App ausführen, erstellen Sie eine Markdown-Datei mit .md und speichern Sie sie im Inhaltsverzeichnis</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587675397.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"></p> <p>Dann starten Sie den Generator:<br> </p> <pre class="brush:php;toolbar:false">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 := <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587820788.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"></p> <hr> <p>Und das ist es!</p> <p>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!</p> <blockquote> <p>Fanden Sie das hilfreich? Sie können mir einen Kaffee spendieren, um weitere Go-Tutorials zu unterstützen! ☕</p> </blockquote> <p>Viel Spaß beim Codieren! ?</p><div> <div> <h2> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173429587555316.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How to Create a Static Site Generator with Go"> Tabintel / Static-Site-Generator </h2> <h3> </h3> </div> <div> <div> <div> <h1>Statischer Site-Generator </h1> </div> <p dir="auto">Ein schneller und einfacher statischer Site-Generator, geschrieben in Go.</p> </div> <br> <br> </div> <br> <div>Auf GitHub ansehen</div> <br> </div> <br>
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!

GO'SSelectstatementsTreamlinesConcurrentProgrammingByMultiplexingoperationen.1) ITallowswaitingonMultiPhanneloperationen, ExecutingTheFirstreadyone) TheDefaultCasepreventsDeadlocksByAntheProgramtoprosectroseverifnooperation.3) itcanpeusedefoursend

Contextandwaitgroupsarecrucialingoforminggoroutineseffektiv.1) contextAllowSsignalingCancellationanddeadlinesAcrossapiobears, Sicherstellung von Goroutinescanbesten

GoisbenficialformicroservicesDuetoitsSimplicity, Effizienz, Androbustconcurcysupport.1) GO'Sdesignemphesimplication und idealFormicroservices.2) seine Konzernmodelusings und ChannelsAllows -Handlings -Handlings -Handlings -Handlings -Handlings -Fassungen

GolangissidealforbuildingsCalablesSystemduetoitseffizienz und Konsumverkehr, whilepythonexcelsinquickScriptingandDataanalyseduetoitssimplication und VacevastEcosystem.golangsDesineScouragesCouragescournations, tadelcodedeanDitsGoroutaTinoutgoroutaTinoutgoroutaTinoutsGoroutinesGoroutinesGoroutsGoroutins, t

Golang ist in Gleichzeitigkeit besser als C, während C bei Rohgeschwindigkeit besser als Golang ist. 1) Golang erreicht durch Goroutine und Kanal eine effiziente Parallelität, die zum Umgang mit einer großen Anzahl von gleichzeitigen Aufgaben geeignet ist. 2) C über Compiler -Optimierung und Standardbibliothek bietet es eine hohe Leistung in der Nähe der Hardware, die für Anwendungen geeignet ist, die eine extreme Optimierung erfordern.

Gründe für die Auswahl von Golang umfassen: 1) Leistung mit hoher Genauigkeit, 2) statisches System, 3) Mechanismusmechanismus, 4) Reiche Standardbibliotheken und Ökosysteme, die es zu einer idealen Wahl für die Entwicklung einer effizienten und zuverlässigen Software machen.

Golang ist für schnelle Entwicklung und gleichzeitige Szenarien geeignet, und C ist für Szenarien geeignet, in denen extreme Leistung und Kontrolle auf niedriger Ebene erforderlich sind. 1) Golang verbessert die Leistung durch Müllsammlung und Parallelitätsmechanismen und eignet sich für die Entwicklung von Webdiensten mit hoher Konsequenz. 2) C erreicht die endgültige Leistung durch das manuelle Speicherverwaltung und die Compiler -Optimierung und eignet sich für eingebettete Systementwicklung.

Golang erzielt eine bessere Kompilierungszeit und gleichzeitige Verarbeitung, während C mehr Vorteile bei der Ausführung von Geschwindigkeit und Speicherverwaltung hat. 1. Golang hat eine schnelle Kompilierungsgeschwindigkeit und ist für eine schnelle Entwicklung geeignet. 2.C läuft schnell und eignet sich für leistungskritische Anwendungen. 3. Golang ist einfach und effizient in der gleichzeitigen Verarbeitung, geeignet für die gleichzeitige Programmierung. 4. C Manual Memory Management bietet eine höhere Leistung, erhöht jedoch die Komplexität der Entwicklung.


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

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
