Trabajo con Markdown en Go: librerías blackfriday, goldmark y chroma

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Markdown en Go (Golang): revisión de librerías populares



Go (Golang) es un lenguaje compilado moderno que a menudo se elige para crear aplicaciones web de alto rendimiento, utilidades CLI y herramientas para la generación de sitios estáticos. Una de las tareas típicas es el procesamiento de marcado Markdown. En este artículo revisaremos tres librerías clave: blackfriday, goldmark y chroma, y mostraremos cómo combinarlas para crear un conversor completo de Markdown a HTML con resaltado de sintaxis.



1. ¿Por qué procesar Markdown en Go?

Markdown es un lenguaje de marcado ligero, ampliamente utilizado en documentación, blogs, archivos README y sistemas de gestión de contenido. En el ecosistema de Go existen varias librerías maduras que permiten:

  • Convertir Markdown a HTML para publicación web.
  • Añadir resaltado de sintaxis para bloques de código.
  • Crear extensiones propias (por ejemplo, soporte para LaTeX, diagramas o bloques personalizados).
  • Integrarse en generadores de sitios estáticos (Hugo, soluciones propias).


2. Librería blackfriday (v2)

Blackfriday es una de las librerías más antiguas y populares para Go. Se caracteriza por su alta velocidad de procesamiento y un comportamiento cercano al estándar CommonMark. Instalación:

go get github.com/russross/blackfriday/v2


Ejemplo simple de uso:

package main

import ( "fmt" "github.com/russross/blackfriday/v2")

func main() { input := []byte("## ¡Hola, Markdown!

Este es **texto en negrita** y `código`.") output := blackfriday.Run(input) fmt.Println(string(output))}


El resultado es código HTML con un encabezado h2, un párrafo y etiquetas strong/code. Blackfriday admite extensiones: tablas, tachado, listas de tareas (task lists) y enlaces automáticos. Para activarlas, use:

html := blackfriday.Run(input,    blackfriday.WithNoExtensions(),    blackfriday.WithExtensions(blackfriday.CommonExtensions),)


3. Librería goldmark (recomendada)

Goldmark es un analizador Markdown moderno, escrito en Go puro. Cumple completamente con la especificación CommonMark 0.30 y proporciona una API flexible para extensiones. Instalación:

go get github.com/yuin/goldmark


Ejemplo básico:

package main

import ( "bytes" "fmt" "github.com/yuin/goldmark")

func main() { source := []byte("# Título

Texto normal con **negrita** y *cursiva*.") var buf bytes.Buffer if err := goldmark.Convert(source, &buf); err != nil { panic(err) } fmt.Println(buf.String())}


Goldmark se extiende fácilmente. Las extensiones integradas incluyen tablas, listas de tareas, notas al pie, enlaces automáticos y resaltado de código a través de chroma. Ejemplo con la extensión de tablas:

import (    "github.com/yuin/goldmark"    "github.com/yuin/goldmark/extension")

markdown := goldmark.New( goldmark.WithExtensions(extension.Table),)


4. Resaltado de código con chroma

Chroma es una librería para el resaltado de sintaxis en Go, que admite más de 190 lenguajes de programación y múltiples temas de estilo. Instalación:

go get github.com/alecthomas/chroma/v2


La integración con goldmark se ve así:

package main

import ( "bytes" "fmt" "github.com/alecthomas/chroma/v2/quick" "github.com/yuin/goldmark" highlighting "github.com/yuin/goldmark-highlighting/v2")

func main() { source := []byte("```gopackage main

import \\"fmt\\"

func main() { fmt.Println(\\"¡Hola, mundo!\\")}```") markdown := goldmark.New( goldmark.WithExtensions( highlighting.Highlighting,

Recommendations