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/v2Exemplo 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/goldmarkExemplo 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/v2A 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, Também na biblioteca
Programação Reativa em Swift: Combine e RxSwift para iOS/macOS
Cliente Redis para C# (.NET): StackExchange.Redis — conexão e exemplos
Kingfisher para Swift: guia completo com exemplos
Envio de email em Go: guia completo sobre bibliotecas e ferramentas