最推荐使用 goldmark 库将 Markdown 转为 HTML;它符合 CommonMark 标准、安全可配置、性能好,需显式注册 extension.Table 等扩展以支持表格和任务列表,并建议全局复用实例以提升 Web 服务性能。

用 Golang 将 Markdown 转为 HTML,最推荐的方式是使用成熟、安全、可配置的第三方库 goldmark(官方推荐的现代 Markdown 解析器),而非手动解析或使用已停止维护的老库(如 blackfriday v1/v2)。它支持 CommonMark 标准、扩展语法(表格、脚注、任务列表等),且设计清晰、无反射、性能好。
使用 goldmark 基础转换
安装库:
go get github.com/yuin/goldmark基础用法示例(支持段落、标题、加粗、链接等):
- 创建 goldmark 实例,调用
Convert()方法,传入 Markdown 字节切片和输出的io.Writer - 默认不启用表格、代码高亮等扩展,需显式添加
- 输出 HTML 是安全的(自动转义非白名单 HTML 标签)
启用常用扩展(表格、任务列表、围栏代码块)
goldmark 默认只支持核心语法。要渲染表格或 - [x] 任务项,需注册扩展:
立即学习“go语言免费学习笔记(深入)”;
- 导入
github.com/yuin/goldmark/extension - 在
goldmark.New()中通过WithExtensions()添加,例如:extension.Table、extension.TaskList、extension.FencedCode - 围栏代码块默认不带语言类名,如需
,要配合extension.CodeFence并设置WithCodeBlockHTMLRenderer
自定义渲染行为(比如修改标题 ID 或链接 target)
goldmark 支持完全可替换的 renderer。若想给所有 自动加 id 属性(用于锚点),或让外链默认打开新标签页:
- 实现
ast.NodeRenderer接口,重写RenderHeading或RenderLink方法 - 用
goldmark.WithRendererOptions()注入自定义渲染器选项 - 更轻量的方式是使用
extension.Linkify(自动识别纯 URL)或extension.GFM(含完整 GitHub Flavored 扩展)
简单 Web 服务中嵌入渲染(如 HTTP handler)
适合博客、文档预览等场景。注意避免每次请求都新建 goldmark 实例(有开销):
- 全局初始化一个
*goldmark.Markdown实例(可复用、并发安全) - handler 中读取请求体 → 调用
md.Convert([]byte(src), &buf)→ 写入响应 - 如需模板包裹(如加 CSS、header),建议先渲染 Markdown,再注入到 HTML 模板中,而非在 Markdown 里写 HTML
基本上就这些。goldmark 灵活但不过度抽象,上手快,扩展性强。不复杂但容易忽略的是:别跳过扩展注册,也别在生产环境用未配置的默认实例处理用户输入——该关的 HTML 渲染、该开的转义,得心里有数。











