Trabalhando com Markdown em Go (Golang): do parsing à customização
\n\nMarkdown — uma das linguagens de marcação mais populares para documentação, blogs e materiais educacionais. No ecossistema Go (Golang), existem várias bibliotecas poderosas que permitem fazer parsing de Markdown, convertê-lo para HTML e até adicionar destaque de sintaxe. Neste artigo, analisaremos as principais ferramentas: goldmark, blackfriday e chroma, além de mostrar como integrá-las em projetos reais.
\n\nPor que é necessário trabalhar com Markdown em Go?
\n\nGo — uma linguagem frequentemente escolhida para criar servidores web, APIs e geradores estáticos de sites. Markdown é ideal para armazenar conteúdo, pois:
\n- \n
- É legível em formato bruto (mesmo sem renderização); \n
- É fácil de editar; \n
- Suporta incorporação de código, tabelas e imagens. \n
As bibliotecas Go permitem transformar Markdown em código HTML seguro em tempo real, o que é crítico para plataformas educacionais (por exemplo, pythonlib.ru).
\n\n1. goldmark — um parser moderno e extensível
\n\ngoldmark — é a biblioteca de referência para trabalhar com Markdown em Go. Ela suporta CommonMark 0.30, GFM (GitHub Flavored Markdown) e é facilmente extensível através de plugins.
\n\nInstalação:
\ngo get github.com/yuin/goldmark\n\nExemplo básico de conversão de Markdown para HTML:
\npackage main\n\nimport (\n "bytes"\n "fmt"\n "github.com/yuin/goldmark"\n)\n\nfunc main() {\n source := []byte("# Olá, Go!\\n\\nEste é um texto **negrito** e `código`.")\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\nSaída:
\n<h1>Olá, Go!</h1>\n<p>Este é um texto <strong>negrito</strong> e <code>código</code>.</p>\n\nExtensões do goldmark:
\n- \n
goldmark-meta— parsing de metadados YAML (cabeçalhos de artigos); \n goldmark-highlighting— destaque de código via Chroma; \n goldmark-pdf— exportação para PDF (experimental). \n
Exemplo usando a extensão para tabelas (GFM):
\nimport (\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 // ... conversão\n}\n\n2. blackfriday — um parser testado pelo tempo
\n\nblackfriday — uma das primeiras bibliotecas para Markdown em Go. Apesar de goldmark ser considerada mais moderna, blackfriday ainda é usada em muitos projetos (por exemplo, Hugo).
\n\nInstalação:
\ngo get github.com/russross/blackfriday/v2\n\nExemplo de uso:
\npackage main\n\nimport (\n "fmt"\n "github.com/russross/blackfriday/v2"\n)\n\nfunc main() {\n input := []byte("## Título\\n\\nLista:\\n- item 1\\n- item 2")\n output := blackfriday.Run(input)\n fmt.Println(string(output))\n}\n\nCaracterísticas do blackfriday:
\n- \n
- Suporte a notas de rodapé, definições, texto riscado; \n
- Flags integradas para configurar a renderização HTML; \n
- Menos dependências do que goldmark. \n
3. Destaque de código com Chroma
\n\nPara sites educacionais, o destaque de sintaxe é crucial. Chroma — é um analisador sintático universal que se integra com goldmark e blackfriday.
\n\nInstalação:
\ngo get github.com/alecthomas/chroma/v2\n\nIntegração com goldmark através de goldmark-highlighting:
import (\n "github.com/yuin/goldmark"\n highlighting "github.com/yuin