العمل مع Markdown في Go (Golang): نظرة عامة على المكتبات الشائعة
Go (Golang) هي لغة حديثة ومترجمة، وغالبًا ما يتم اختيارها لإنشاء تطبيقات ويب عالية الأداء، وأدوات سطر الأوامر (CLI)، وأدوات إنشاء المواقع الثابتة. إحدى المهام النموذجية هي معالجة تنسيق Markdown. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: blackfriday وgoldmark وchroma، وسنوضح كيفية دمجها لإنشاء محول كامل من Markdown إلى HTML مع تمييز بناء الجملة.
1. لماذا معالجة Markdown في Go؟
Markdown هي لغة تنسيق خفيفة، تُستخدم على نطاق واسع في التوثيق والمدونات وملفات README وأنظمة إدارة المحتوى. في نظام Go البيئي، توجد عدة مكتبات ناضجة تتيح لك:
- تحويل Markdown إلى HTML للنشر على الويب.
- إضافة تمييز بناء الجملة لكتل الكود.
- إنشاء إضافات مخصصة (مثل دعم LaTeX أو الرسوم البيانية أو الكتل المخصصة).
- التكامل مع مولدات المواقع الثابتة (Hugo، أو الحلول الخاصة).
2. مكتبة blackfriday (الإصدار 2)
Blackfriday هي واحدة من أقدم وأشهر مكتبات Go. تتميز بسرعة أدائها العالية وسلوكها القريب من معيار CommonMark. التثبيت:
go get github.com/russross/blackfriday/v2مثال بسيط على الاستخدام:
package main
import ( "fmt" "github.com/russross/blackfriday/v2")
func main() { input := []byte("## مرحبًا، Markdown!
هذا **نص غامق** و`كود`.") output := blackfriday.Run(input) fmt.Println(string(output))}النتيجة هي كود HTML يحتوي على عنوان h2 وفقرة ووسوم strong/code. يدعم Blackfriday الإضافات: الجداول، والنص المشطوب، وقوائم المهام، والروابط التلقائية. للتفعيل، استخدم:
html := blackfriday.Run(input, blackfriday.WithNoExtensions(), blackfriday.WithExtensions(blackfriday.CommonExtensions),)3. مكتبة goldmark (موصى بها)
Goldmark هي محلل Markdown حديث، مكتوب بلغة Go الخالصة. يتوافق تمامًا مع مواصفات CommonMark 0.30 ويوفر واجهة برمجة تطبيقات (API) مرنة للإضافات. التثبيت:
go get github.com/yuin/goldmarkمثال أساسي:
package main
import ( "bytes" "fmt" "github.com/yuin/goldmark")
func main() { source := []byte("# عنوان
نص عادي مع **غامق** و*مائل*.") var buf bytes.Buffer if err := goldmark.Convert(source, &buf); err != nil { panic(err) } fmt.Println(buf.String())}يمكن توسيع Goldmark بسهولة. تشمل الإضافات المضمنة الجداول، وقوائم المهام، والحواشي السفلية، والروابط التلقائية، وتمييز الكود عبر chroma. مثال مع إضافة الجداول:
import ( "github.com/yuin/goldmark" "github.com/yuin/goldmark/extension")
markdown := goldmark.New( goldmark.WithExtensions(extension.Table),)4. تمييز الكود باستخدام chroma
Chroma هي مكتبة لتمييز بناء الجملة بلغة Go، تدعم أكثر من 190 لغة برمجة والعديد من السمات. التثبيت:
go get github.com/alecthomas/chroma/v2التكامل مع goldmark يبدو كالتالي:
package main
import ( "bytes" "fmt" "github.com/alecthomas/chroma/v2/quick" "github.com/yuin/goldmark" highlighting "github.com/yuin/goldmark-highlighting/v2")
func main() { source := []byte("```gopackage main
import \\"fmt\\"
func main() { fmt.Println(\\"Hello, world!\\")}```") markdown := goldmark.New( goldmark.WithExtensions( highlighting.Highlighting,