Trabalhando com Markdown em Go: bibliotecas blackfriday, goldmark e chroma

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Markdown em Go (Golang): visão geral das bibliotecas populares



Go (Golang) é uma linguagem compilada moderna, frequentemente escolhida para criar aplicações web de alto desempenho, utilitários CLI e ferramentas para geração de sites estáticos. Uma das tarefas típicas é o processamento de marcação Markdown. Neste artigo, vamos analisar três bibliotecas principais: blackfriday, goldmark e chroma, além de mostrar como combiná-las para criar um conversor completo de Markdown para HTML com destaque de sintaxe.



1. Por que processar Markdown em Go?

Markdown é uma linguagem de marcação leve, amplamente utilizada em documentação, blogs, arquivos README e sistemas de gerenciamento de conteúdo. No ecossistema Go, existem várias bibliotecas maduras que permitem:

  • Converter Markdown para HTML para publicação na web.
  • Adicionar destaque de sintaxe para blocos de código.
  • Criar extensões personalizadas (por exemplo, suporte a LaTeX, diagramas ou blocos customizados).
  • Integrar-se a geradores de sites estáticos (Hugo, soluções próprias).


2. Biblioteca blackfriday (v2)

Blackfriday é uma das bibliotecas mais antigas e populares para Go. Ela se destaca pela alta velocidade de processamento e comportamento próximo ao padrão CommonMark. Instalação:

go get github.com/russross/blackfriday/v2


Exemplo simples de uso:

package main

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

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

Este é **texto em negrito** e `código`.") output := blackfriday.Run(input) fmt.Println(string(output))}


O resultado é um código HTML com cabeçalho h2, parágrafo e tags strong/code. Blackfriday suporta extensões: tabelas, tachado, listas de tarefas (task lists) e links automáticos. Para ativar, use:

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


3. Biblioteca goldmark (recomendada)

Goldmark é um parser Markdown moderno, escrito em Go puro. Ele é totalmente compatível com a especificação CommonMark 0.30 e oferece uma API flexível para extensões. Instalação:

go get github.com/yuin/goldmark


Exemplo básico:

package main

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

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

Texto normal com **negrito** e *itálico*.") var buf bytes.Buffer if err := goldmark.Convert(source, &buf); err != nil { panic(err) } fmt.Println(buf.String())}


Goldmark é facilmente extensível. As extensões integradas incluem tabelas, listas de tarefas, notas de rodapé, links automáticos e destaque de código via chroma. Exemplo com extensão de tabelas:

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

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


4. Destaque de sintaxe com chroma

Chroma é uma biblioteca para destaque de sintaxe em Go, que suporta mais de 190 linguagens de programação e diversos temas de formatação. Instalação:

go get github.com/alecthomas/chroma/v2


A integração com goldmark fica assim:

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(\\"Olá, mundo!\\")}```") markdown := goldmark.New( goldmark.WithExtensions( highlighting.Highlighting,

Recommendations