提问背景 Question:
extension.GFM 你给我的函数中,extension.GFM这一行有错误。undefined: extension [linux]
修复Goldmark在Go中Markdown解析失败问题
出现 undefined: extension 的原因是因为 goldmark 的核心库与扩展库是分拆管理的。你需要在代码顶部同时导入核心库和扩展子包,并且在配置时显式传入 extension.GFM。
正确的 Go 导入方式
请确保你的 import 部分包含以下内容:
import (
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
"github.com/yuin/goldmark/renderer/html"
)
修复后的 ConvertMarkdown 函数
你需要创建一个支持 GFM (GitHub Flavored Markdown) 的 Markdown 实例,并在转换时使用它:
func ConvertMarkdown(mdContent string) template.HTML {
// 初始化带有 GFM 扩展的 Goldmark
md := goldmark.New(
goldmark.WithExtensions(extension.GFM),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
goldmark.WithRendererOptions(
html.WithUnsafe(), // 如果你需要渲染 Markdown 中的 HTML 标签,请开启此项
),
)
var buf bytes.Buffer
if err := md.Convert([]byte(mdContent), &buf); err != nil {
return template.HTML(mdContent)
}
return template.HTML(buf.String())
}
关键排查点:
- 依赖检查:如果编译依然报错,请在项目目录下执行
go get github.com/yuin/goldmark。该库会自动下载依赖。 - 模板渲染:确保模板文件中使用的是
{{.Article.Content}}而不是{{printf "%s" .Article.Content}}或其他会导致二次转义的写法。 - HTML 属性:如果你在页面中使用了 Tailwind 的
prose样式(如prose prose-blue),确保容器包含该 class,否则 Markdown 生成的<ul>、<li>、<h1>等标签可能因为没有默认样式而导致看起来像“没生效”。