العمل مع Markdown في Go (Golang): المكتبات، التحليل والتحويل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع Markdown في Go (Golang): من التحليل إلى التخصيص

\n\n

Markdown هي واحدة من أشهر لغات الترميز للتوثيق والمدونات والمواد التعليمية. في نظام Go (Golang) البيئي، توجد عدة مكتبات قوية تتيح تحليل Markdown، وتحويله إلى HTML، وحتى إضافة إبراز بناء الجملة. في هذه المقالة، سنستعرض الأدوات الرئيسية: goldmark، blackfriday و chroma، وسنوضح كيفية دمجها في المشاريع الحقيقية.

\n\n

لماذا نحتاج العمل مع Markdown في Go؟

\n\n

Go هي لغة تُختار غالبًا لإنشاء خوادم الويب وواجهات API ومولدات المواقع الثابتة. Markdown مثالي لتخزين المحتوى لأنه:

\n
    \n
  • قابل للقراءة في شكله الخام (حتى بدون عرض)؛
  • \n
  • سهل التحرير؛
  • \n
  • يدعم تضمين الأكواد والجداول والصور.
  • \n
\n

تتيح مكتبات Go تحويل Markdown إلى كود HTML آمن في الوقت الفعلي، وهو أمر بالغ الأهمية للمنصات التعليمية (مثل pythonlib.ru).

\n\n

1. goldmark — محلل حديث وقابل للتوسع

\n\n

goldmark هي المكتبة المرجعية للعمل مع Markdown في Go. تدعم CommonMark 0.30 و GFM (GitHub Flavored Markdown) ويمكن توسيعها بسهولة عبر الإضافات.

\n\n

التثبيت:

\n
go get github.com/yuin/goldmark
\n\n

مثال أساسي لتحويل Markdown إلى HTML:

\n
package main\n\nimport (\n    "bytes"\n    "fmt"\n    "github.com/yuin/goldmark"\n)\n\nfunc main() {\n    source := []byte("# مرحبًا، Go!\\n\\nهذا نص **عريض** و `كود`.")\n    var buf bytes.Buffer\n    if err := goldmark.Convert(source, &buf); err != nil {\n        panic(err)\n    }\n    fmt.Println(buf.String())\n}
\n\n

الإخراج:

\n
<h1>مرحبًا، Go!</h1>\n<p>هذا <strong>نص عريض</strong> و <code>كود</code>.</p>
\n\n

إضافات goldmark:

\n
    \n
  • goldmark-meta — تحليل بيانات YAML الوصفية (عناوين المقالات)؛
  • \n
  • goldmark-highlighting — إبراز الكود عبر Chroma؛
  • \n
  • goldmark-pdf — التصدير إلى PDF (تجريبي).
  • \n
\n\n

مثال باستخدام إضافة الجداول (GFM):

\n
import (\n    "github.com/yuin/goldmark"\n    "github.com/yuin/goldmark/extension"\n)\n\nfunc main() {\n    md := goldmark.New(\n        goldmark.WithExtensions(extension.GFM),\n    )\n    // ... التحويل\n}
\n\n

2. blackfriday — محلل مجرب عبر الزمن

\n\n

blackfriday هي واحدة من أولى مكتبات Markdown في Go. على الرغم من أن goldmark يُعتبر أكثر حداثة، إلا أن blackfriday لا يزال يُستخدم في العديد من المشاريع (مثل Hugo).

\n\n

التثبيت:

\n
go get github.com/russross/blackfriday/v2
\n\n

مثال على الاستخدام:

\n
package main\n\nimport (\n    "fmt"\n    "github.com/russross/blackfriday/v2"\n)\n\nfunc main() {\n    input := []byte("## عنوان\\n\\nقائمة:\\n- عنصر 1\\n- عنصر 2")\n    output := blackfriday.Run(input)\n    fmt.Println(string(output))\n}
\n\n

ميزات blackfriday:

\n
    \n
  • دعم الحواشي السفلية والتعريفات والخط المشطوب؛
  • \n
  • علامات مدمجة لتخصيص عرض HTML؛
  • \n
  • تبعيات أقل مقارنة بـ goldmark.
  • \n
\n\n

3. إبراز الكود باستخدام Chroma

\n\n

للمواقع التعليمية، يعتبر إبراز بناء الجملة أمرًا بالغ الأهمية. Chroma هو محلل نحوي عالمي يتكامل مع goldmark و blackfriday.

\n\n

التثبيت:

\n
go get github.com/alecthomas/chroma/v2
\n\n

التكامل مع goldmark عبر goldmark-highlighting:

\n
import (\n    "github.com/yuin/goldmark"\n    highlighting "github.com/yuin                    

توصيات