recherche
Maisondéveloppement back-endGolangComment 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

How to Create a Static Site Generator with Go 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.




Voir sur GitHub


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) 


<hr>
<h2>
  
  
  Usage
</h2>

<p>Avant d'exécuter l'application, créez un fichier markdown à l'aide de .md et enregistrez-le dans le répertoire de contenu</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>Ensuite, lancez le générateur :<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)
}

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 :)

How to Create a Static Site Generator with Go

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 := 


<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>Et c'est tout !</p>

<p>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 !</p>

<blockquote>
<p>Vous avez trouvé cela utile ? Vous pouvez m'offrir un café pour soutenir davantage de tutoriels Go ! ☕</p>
</blockquote>

<p>Bon codage ! ?</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
       / 
        générateur de site statique
      
    </h2>
    <h3>
      
    </h3>
  </div>
  <div>
    
<div>
<div>
<h1>Générateur de sites statiques

</h1>
</div>

<p dir="auto">Un générateur de site statique rapide et simple écrit en Go.</p>

</div>
<br>
<br>
  </div>
<br>
  <div>Voir sur GitHub</div>
<br>
</div>
<br>



          

            
        

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!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Golang vs Python: concurrence et multithreadingGolang vs Python: concurrence et multithreadingApr 17, 2025 am 12:20 AM

Golang convient plus à des tâches de concurrence élevées, tandis que Python présente plus d'avantages dans la flexibilité. 1. Golang gère efficacement la concurrence par le goroutine et le canal. 2. Python repose sur le filetage et l'asyncio, qui est affecté par GIL, mais fournit plusieurs méthodes de concurrence. Le choix doit être basé sur des besoins spécifiques.

Golang et C: les compromis en performanceGolang et C: les compromis en performanceApr 17, 2025 am 12:18 AM

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 vs Python: applications et cas d'utilisationGolang vs Python: applications et cas d'utilisationApr 17, 2025 am 12:17 AM

ChooseGolangForHighPerformanceAnd Concurrence, IdealForBackendServices andNetworkProgramming; selectPythonForrapidDevelopment, dataScience et MachineLearningDuetOtsSertilityAnStensiveLibrarary.

Golang vs Python: différences et similitudes clésGolang vs Python: différences et similitudes clésApr 17, 2025 am 12:15 AM

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.

Golang vs Python: Courbe de facilité d'utilisation et d'apprentissageGolang vs Python: Courbe de facilité d'utilisation et d'apprentissageApr 17, 2025 am 12:12 AM

Dans quels aspects Golang et Python sont-ils plus faciles à utiliser et à avoir une courbe d'apprentissage plus lisse? Golang est plus adapté aux besoins élevés de concurrence et de haute performance, et la courbe d'apprentissage est relativement douce pour les développeurs ayant une formation en langue C. Python est plus adapté à la science des données et au prototypage rapide, et la courbe d'apprentissage est très fluide pour les débutants.

La course de performance: Golang vs CLa course de performance: Golang vs CApr 16, 2025 am 12:07 AM

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.

Golang vs C: Exemples de code et analyse des performancesGolang vs C: Exemples de code et analyse des performancesApr 15, 2025 am 12:03 AM

Golang convient au développement rapide et à la programmation simultanée, tandis que C est plus adapté aux projets qui nécessitent des performances extrêmes et un contrôle sous-jacent. 1) Le modèle de concurrence de Golang simplifie la programmation de concurrence via le goroutine et le canal. 2) La programmation du modèle C fournit un code générique et une optimisation des performances. 3) La collecte des ordures de Golang est pratique mais peut affecter les performances. La gestion de la mémoire de C est complexe mais le contrôle est bien.

Impact de Golang: vitesse, efficacité et simplicitéImpact de Golang: vitesse, efficacité et simplicitéApr 14, 2025 am 12:11 AM

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

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft