go 语言可用 goldmark 库实现 markdown 解析与 html 渲染:安装后可将字符串或文件转为 HTML,支持表格、链接、高亮等扩展,需按需启用 WithUnsafe() 以保障安全。

用 Go 语言实现 Markdown 解析工具,核心是借助成熟的第三方库(如 goldmark)完成语法解析与 HTML 渲染,而非从零手写解析器。下面以 goldmark 为例,给出简洁、可运行的生成 HTML 文档示例。
安装 goldmark 库
这是目前 Go 生态中最活跃、符合 CommonMark 规范的 Markdown 解析器:
- 执行命令安装:
go get github.com/yuin/goldmark - 支持扩展(表格、脚注、目录等),也兼容自定义渲染器
基础解析:将 Markdown 字符串转为 HTML
以下是最小可用示例,把一段 Markdown 文本直接转成 HTML 字符串:
package main <p>import ( "bytes" "fmt" "github.com/yuin/goldmark" "github.com/yuin/goldmark/renderer/html" )</p><p>func main() { md := "# HellonnThis is <strong>bold</strong> and <a href="https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635">a link</a>."</p><pre class="brush:php;toolbar:false;">var buf bytes.Buffer if err := goldmark.Convert([]byte(md), &buf, goldmark.WithRenderer(html.NewRenderer( html.WithUnsafe(), // 允许原始 HTML(如 <script>,按需开启) )), ); err != nil { panic(err) } fmt.Println(buf.String()) // 输出:<h1>Hello</h1>n<p>This is <strong>bold</strong> and <a href="https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635">a link</a>.</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">go语言免费学习笔记(深入)</a>”;</p>n
}
读取文件并生成完整 HTML 页面
实际使用中常需将 .md 文件转为带 HTML 头部/尾部的独立页面:
- 先读取 Markdown 文件内容(如
input.md) - 用
goldmark渲染为 HTML 片段 - 拼接标准 HTML 模板(含
、、) - 写入输出文件(如
output.html)
示例代码片段:
import ( "io/ioutil" "os" "strings" ) <p>func renderToHTMLFile(mdPath, htmlPath string) error { src, err := ioutil.ReadFile(mdPath) if err != nil { return err }</p><pre class="brush:php;toolbar:false;">var buf bytes.Buffer if err := goldmark.Convert(src, &buf, goldmark.WithRenderer(html.NewRenderer(html.WithUnsafe())), ); err != nil { return err } htmlTemplate := `<!DOCTYPE html>
html>
fullHTML := fmt.Sprintf(htmlTemplate, buf.String()) return ioutil.WriteFile(htmlPath, []byte(fullHTML), 0644)
}
添加常用扩展(表格、代码高亮等)
默认 goldmark 不启用扩展,需显式添加:
- 表格:
extension.table - 自动链接:
extension.Linkify - 代码块语法高亮(需配合
chroma):extension.Highlighting
启用方式示例:
import "github.com/yuin/goldmark/extension" <p>md := goldmark.New( goldmark.WithExtensions( extension.Table, extension.Linkify, extension.Strikethrough, ), goldmark.WithRendererOptions( html.WithUnsafe(), html.WithXHTML(), ), )
不复杂但容易忽略:确保输入 Markdown 符合规范(如空行分隔段落),并根据安全需求谨慎使用 WithUnsafe() —— 若处理用户输入,建议关闭该选项以过滤 script 标签。