Golang实现Markdown和HTML互转的库推荐

最近在做一个需要处理Markdown和HTML互相转换的Golang项目,想请教大家有没有推荐的高质量库?最好能满足以下要求:

  1. 转换准确度高,能保留原始格式
  2. 支持标准Markdown语法和扩展语法
  3. 性能较好,适合处理大量文本
  4. 维护活跃,文档齐全

目前了解到的有blackfriday和goldmark,不知道实际使用体验如何?还有其他更好的选择吗?求推荐!

2 回复

推荐几个常用库:

Markdown转HTML:

  1. blackfriday - 最流行的Go Markdown解析器,支持GFM,性能优秀
  2. goldmark - 更现代的替代品,扩展性强,CommonMark兼容
  3. gomarkdown/markdown - 轻量级,符合CommonMark规范

HTML转Markdown:

  1. Jekyll/gohugo.io - 虽然主要是静态站点生成器,但包含转换功能
  2. HTML-to-Markdown - 专门用于HTML转MD的库

双向转换:

  • 可以组合使用blackfriday(MD→HTML)和反向转换工具
  • 部分库如goldmark配合插件可实现部分反向功能

建议:

  • 优先考虑blackfriday + 自定义HTML处理
  • 需要最新标准支持选goldmark
  • 简单场景用gomarkdown

这些库在GitHub上star数都很高,文档齐全,适合生产环境使用。

更多关于Golang实现Markdown和HTML互转的库推荐的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


推荐以下几个高质量的 Go 库,用于 Markdown 和 HTML 之间的相互转换:

1. Goldmark

  • 特点:性能优秀,符合 CommonMark 标准,扩展性强,支持自定义渲染和语法扩展(如表格、删除线等)。
  • 适用场景:通用 Markdown 解析和渲染,适合需要灵活配置的项目。
  • 示例代码
    package main
    
    import (
        "bytes"
        "fmt"
        "github.com/yuin/goldmark"
    )
    
    func main() {
        md := goldmark.New()
        var buf bytes.Buffer
        source := []byte("# Hello, Markdown!")
        if err := md.Convert(source, &buf); err != nil {
            panic(err)
        }
        fmt.Println(buf.String()) // 输出: <h1>Hello, Markdown!</h1>
    }
    

2. Blackfriday

  • 特点:成熟稳定,支持 GitHub Flavored Markdown(GFM),但仅支持 Markdown 到 HTML 的转换。
  • 适用场景:快速解析 GFM 风格的 Markdown,无需反向转换。
  • 示例代码
    package main
    
    import (
        "fmt"
        "github.com/russross/blackfriday/v2"
    )
    
    func main() {
        input := []byte("**Bold Text**")
        output := blackfriday.Run(input)
        fmt.Println(string(output)) // 输出: <p><strong>Bold Text</strong></p>
    }
    

3. Go HTML to Markdown

  • 特点:专门用于 HTML 到 Markdown 的转换,轻量且易用。
  • 适用场景:需要将 HTML 内容转换为 Markdown 格式。
  • 示例代码
    package main
    
    import (
        "fmt"
        "github.com/JohannesKaufmann/html-to-markdown"
    )
    
    func main() {
        converter := html2md.NewConverter("", true, nil)
        html := `<h1>Title</h1><p>Paragraph with <strong>bold</strong> text.</p>`
        markdown, err := converter.ConvertString(html)
        if err != nil {
            panic(err)
        }
        fmt.Println(markdown) // 输出: # Title\n\nParagraph with **bold** text.
    }
    

总结建议:

  • Markdown → HTML:优先选择 Goldmark(功能全面)或 Blackfriday(兼容 GFM)。
  • HTML → Markdown:使用 Go HTML to Markdown 库。
  • 若需双向转换,可组合 Goldmark(解析 Markdown)和 Go HTML to Markdown(转换回 Markdown)。

这些库均经过广泛测试,文档齐全,适合生产环境使用。

回到顶部