Comment créer un générateur de site statique avec Go
Les générateurs de sites statiques sont des outils puissants qui simplifient la création de sites Web légers, rapides et évolutifs. Que vous créiez des blogs, de la documentation ou des sites pour petites entreprises, ils transforment le contenu écrit en Markdown en fichiers HTML statiques et efficaces.
Dans ce guide, nous allons créer un Générateur de site statique (SSG) dans Go, un langage de programmation réputé pour ses performances, sa simplicité et sa concurrence. Nous allons créer un outil CLI qui prend les fichiers Markdown en entrée, les traite à l'aide d'un modèle HTML prédéfini et génère de belles pages HTML statiques.
Pourquoi construire ceci ?
Un générateur de site statique peut servir à plusieurs fins pratiques :
- Sites de documentation : générez des sites à chargement rapide pour la documentation technique.
- Blogs : rédigez votre contenu dans Markdown et déployez-le sans effort.
- Prototypage : créez rapidement des sites statiques pour de petits projets ou des vitrines.
Pourquoi utiliser Go pour ce projet ?
- Vitesse : Go compile en code machine natif, créant des outils comme celui-ci incroyablement rapides.
- Concurrency : Go facilite le traitement simultané de plusieurs fichiers.
- Simplicité : la syntaxe de Go est minimale et la création d'outils CLI est simple.
J'ai eu beaucoup de plaisir à construire ce projet :)
Configuration du projet
Avant de plonger dans le code, décrivons la structure du projet :
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/
Si vous souhaitez construire à partir de zéro, exécutez cette commande pour initialiser un module Go pour le projet
go mod init
Principales caractéristiques :
Convertir Markdown en HTML ?
Principe YAML pour l'analyse des métadonnées
Modèles HTML pour une sortie personnalisable
Détection des modifications de fichiers en temps réel avec un observateur ?
Construire le projet
1. Cloner le référentiel
Avant de commencer, clonez le référentiel sur votre machine locale :
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
Tabintel
/
générateur de site statique
Générateur de sites statiques
Un générateur de site statique rapide et simple écrit en Go.
Cela vous donnera tous les fichiers de démarrage et la structure du projet nécessaires pour créer et exécuter le SSG.
2. Analyseur de démarques
L'analyseur Markdown gère la conversion des fichiers .md en contenu HTML. Il permet également des fonctionnalités étendues telles que les identifiants de titre automatiques.
interne/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/
✨Convertit le contenu Markdown au format HTML avec prise en charge de fonctionnalités étendues.
3. Analyseur de frontmatière
L'analyseur de frontmatter extrait les métadonnées telles que le titre, la date, les balises et la description des fichiers Markdown.
interne/parser/frontmatter.go
go mod init
? Extrait et renvoie les métadonnées ainsi que le contenu du fichier Markdown.
4. Générateur HTML
Le générateur HTML utilise le package html/template de Go pour créer des pages HTML statiques basées sur un modèle.
interne/générateur/html.go
git clone https://github.com/Tabintel/static-site-generator.git cd static-site-generator
? Génère des fichiers HTML à partir de modèles et de contenu Markdown analysé.
5. Observateur de fichiers
Notre observateur surveille le répertoire content/ pour détecter les modifications et déclenche automatiquement les reconstructions.
Ceci est construit en utilisant https://github.com/fsnotify/fsnotify
interne/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), } }
? Détecte les modifications de fichiers et automatise la régénération des fichiers statiques.
6. Application principale
Le point d'entrée relie tous les composants ensemble et fournit des options CLI pour la personnalisation.
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 }
Usage
Avant d'exécuter l'application, créez un fichier markdown à l'aide de .md et enregistrez-le dans le répertoire de contenu
Ensuite, lancez le générateur :
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) }
Il convertit le fichier markdown en fichier HTML et l'enregistre dans le répertoire de sortie
Comme vous pouvez le voir, il ajoute une mise en forme pour le rendre visuellement attrayant :)
Surveillez les changements
Activer l'observateur :
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 }
Et c'est tout !
Ce SSG convertit le markdown en HTML propre, surveille les changements et maintient votre contenu organisé. Déposez un commentaire si vous construisez quelque chose avec - j'aimerais voir ce que vous créez !
Vous avez trouvé cela utile ? Vous pouvez m'offrir un café pour soutenir davantage de tutoriels Go ! ☕
Bon codage ! ?
Tabintel
/
générateur de site statique
Générateur de sites statiques
Un générateur de site statique rapide et simple écrit en Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Golang est meilleur que Python en termes de performances et d'évolutivité. 1) Les caractéristiques de type compilation de Golang et le modèle de concurrence efficace le font bien fonctionner dans des scénarios de concurrence élevés. 2) Python, en tant que langue interprétée, s'exécute lentement, mais peut optimiser les performances via des outils tels que Cython.

Golang est meilleur que C en concurrence, tandis que C est meilleur que Golang en vitesse brute. 1) Golang obtient une concurrence efficace par le goroutine et le canal, ce qui convient à la gestion d'un grand nombre de tâches simultanées. 2) C Grâce à l'optimisation du compilateur et à la bibliothèque standard, il offre des performances élevées près du matériel, adaptées aux applications qui nécessitent une optimisation extrême.

GOISIDEALFORBEGINNERNERS et combinant pour pourcloudandNetWorkServicesDuetOtssimplicity, Efficiency, andCurrencyFeatures.1) InstallgofromTheofficialwebsiteandverifywith'goversion'..2)

Golang convient au développement rapide et aux scénarios simultanés, et C convient aux scénarios où des performances extrêmes et un contrôle de bas niveau sont nécessaires. 1) Golang améliore les performances grâce à des mécanismes de collecte et de concurrence des ordures, et convient au développement de services Web à haute concurrence. 2) C réalise les performances ultimes grâce à la gestion manuelle de la mémoire et à l'optimisation du compilateur, et convient au développement du système intégré.

GOIMIMPACTSDEVENCEMENTSPOSITIVEMENTS INSPECT, EFFICACTION ET APPLICATION.1) VITESSE: GOCOMPILESQUICKLYANDRUNSEFFIÉMENT, IDEALFORLARGEPROROSTS.2) Efficacité: ITSCOMPEHENSIVESTANDARDLIBRARYREDUCEEXTERNEDENDENCES, EnhancingDevelovefficiency.3) Simplicité: Simplicité: Implicité de la manière

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.

Les différences de performance entre Golang et C se reflètent principalement dans la gestion de la mémoire, l'optimisation de la compilation et l'efficacité du temps d'exécution. 1) Le mécanisme de collecte des ordures de Golang est pratique mais peut affecter les performances, 2) la gestion manuelle de C et l'optimisation du compilateur sont plus efficaces dans l'informatique récursive.

Golang et C ont chacun leurs propres avantages dans les compétitions de performance: 1) Golang convient à une concurrence élevée et à un développement rapide, et 2) C fournit des performances plus élevées et un contrôle fin. La sélection doit être basée sur les exigences du projet et la pile de technologie d'équipe.
