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

用 Go 语言实现 Markdown 解析工具,核心是借助成熟的第三方库(如 goldmark)完成语法解析与 HTML 渲染,而非从零手写解析器。下面以 goldmark 为例,给出简洁、可运行的生成 HTML 文档示例。
这是目前 Go 生态中最活跃、符合 CommonMark 规范的 Markdown 解析器:
go get github.com/yuin/goldmark
以下是最小可用示例,把一段 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}
实际使用中常需将 .md 文件转为带 HTML 头部/尾部的独立页面:
input.md)goldmark 渲染为 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 标签。
以上就是如何使用Golang实现Markdown解析工具_生成HTML文档示例的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号