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 := "# Hello\n\nThis 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(), ), )</p>
不复杂但容易忽略:确保输入 Markdown 符合规范(如空行分隔段落),并根据安全需求谨慎使用 WithUnsafe() —— 若处理用户输入,建议关闭该选项以过滤 script 标签。











