Travailler avec Markdown en Go (Golang) : bibliothèques, analyse et conversion

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec Markdown en Go (Golang) : de l'analyse à la personnalisation

\n\n

Markdown est l'un des langages de balisage les plus populaires pour la documentation, les blogs et le matériel pédagogique. Dans l'écosystème Go (Golang), il existe plusieurs bibliothèques puissantes permettant d'analyser Markdown, de le convertir en HTML et même d'ajouter la coloration syntaxique. Dans cet article, nous allons examiner les outils clés : goldmark, blackfriday et chroma, et montrer comment les intégrer dans des projets réels.

\n\n

Pourquoi travailler avec Markdown en Go ?

\n\n

Go est un langage souvent choisi pour créer des serveurs web, des API et des générateurs de sites statiques. Markdown est idéal pour stocker du contenu car il :

\n
    \n
  • Est lisible en format brut (même sans rendu) ;
  • \n
  • Est facile à éditer ;
  • \n
  • Prend en charge l'intégration de code, de tableaux et d'images.
  • \n
\n

Les bibliothèques Go permettent de convertir à la volée Markdown en code HTML sécurisé, ce qui est essentiel pour les plateformes éducatives (par exemple, pythonlib.ru).

\n\n

1. goldmark — un analyseur moderne et extensible

\n\n

goldmark est la bibliothèque de référence pour travailler avec Markdown en Go. Elle prend en charge CommonMark 0.30, GFM (GitHub Flavored Markdown) et est facilement extensible via des plugins.

\n\n

Installation :

\n
go get github.com/yuin/goldmark
\n\n

Exemple de base de conversion Markdown en HTML :

\n
package main\n\nimport (\n    "bytes"\n    "fmt"\n    "github.com/yuin/goldmark"\n)\n\nfunc main() {\n    source := []byte("# Bonjour, Go!\\n\\nCeci est du texte **gras** et du `code`.")\n    var buf bytes.Buffer\n    if err := goldmark.Convert(source, &buf); err != nil {\n        panic(err)\n    }\n    fmt.Println(buf.String())\n}
\n\n

Sortie :

\n
<h1>Bonjour, Go!</h1>\n<p>Ceci est du texte <strong>gras</strong> et du <code>code</code>.</p>
\n\n

Extensions de goldmark :

\n
    \n
  • goldmark-meta — analyse des métadonnées YAML (en-têtes d'articles) ;
  • \n
  • goldmark-highlighting — coloration syntaxique via Chroma ;
  • \n
  • goldmark-pdf — export en PDF (expérimental).
  • \n
\n\n

Exemple avec l'extension pour les tableaux (GFM) :

\n
import (\n    "github.com/yuin/goldmark"\n    "github.com/yuin/goldmark/extension"\n)\n\nfunc main() {\n    md := goldmark.New(\n        goldmark.WithExtensions(extension.GFM),\n    )\n    // ... conversion\n}
\n\n

2. blackfriday — un analyseur éprouvé par le temps

\n\n

blackfriday est l'une des premières bibliothèques pour Markdown en Go. Bien que goldmark soit considéré comme plus moderne, blackfriday est encore utilisé dans de nombreux projets (par exemple, Hugo).

\n\n

Installation :

\n
go get github.com/russross/blackfriday/v2
\n\n

Exemple d'utilisation :

\n
package main\n\nimport (\n    "fmt"\n    "github.com/russross/blackfriday/v2"\n)\n\nfunc main() {\n    input := []byte("## Titre\\n\\nListe :\\n- élément 1\\n- élément 2")\n    output := blackfriday.Run(input)\n    fmt.Println(string(output))\n}
\n\n

Caractéristiques de blackfriday :

\n
    \n
  • Prise en charge des notes de bas de page, des définitions, du texte barré ;
  • \n
  • Drapeaux intégrés pour configurer le rendu HTML ;
  • \n
  • Moins de dépendances que goldmark.
  • \n
\n\n

3. Coloration syntaxique avec Chroma

\n\n

Pour les sites éducatifs, la coloration syntaxique est essentielle. Chroma est un analyseur syntaxique universel qui s'intègre avec goldmark et blackfriday.

\n\n

Installation :

\n
go get github.com/alecthomas/chroma/v2
\n\n

Intégration avec goldmark via goldmark-highlighting :

\n
import (\n    "github.com/yuin/goldmark"\n    highlighting "github.com/yuin                    

Recommendations