如何使用Golang实现Markdown解析工具_生成HTML文档示例

2次阅读

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

如何使用Golang实现Markdown解析工具_生成HTML文档示例

用 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 头部/尾部的独立页面:

如何使用Golang实现Markdown解析工具_生成HTML文档示例

Bardeen AI

使用AI自动执行人工任务

如何使用Golang实现Markdown解析工具_生成HTML文档示例 165

查看详情 如何使用Golang实现Markdown解析工具_生成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>

Markdown Preview%s `

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 标签。

text=ZqhQzanResources