GORM للغة Go: دليل شامل مع أمثلة

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

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

ابدأ الدورة

ما هو GORM ولماذا هو مطلوب؟

\n\n

GORM هي مكتبة ORM (تعيين الكائنات العلائقية) قوية وشائعة للغة Go. توفر للمطورين طريقة مريحة للتفاعل مع قواعد البيانات العلائقية (PostgreSQL، MySQL، SQLite، SQL Server وغيرها) باستخدام نهج كائني التوجه في Go.

\n\n

لماذا هو مطلوب GORM؟

\n
    \n
  • أتمتة CRUD: يتولى GORM كتابة كود SQL النمطي لإنشاء وقراءة وتحديث وحذف السجلات.
  • \n
  • ترحيل المخطط: يسمح بإنشاء وتحديث الجداول في قاعدة البيانات تلقائيًا بناءً على هياكل Go الخاصة بك.
  • \n
  • العلاقات بين الجداول: يبسط العمل مع علاقات "واحد إلى متعدد" و"متعدد إلى متعدد" و"واحد إلى واحد".
  • \n
  • الأمان: حماية مدمجة ضد حقن SQL من خلال الاستعلامات المعلمة.
  • \n
  • الأداء: يدعم التحميل البطيء (Lazy Loading) والتحميل المبكر (Eager Loading) والتخزين المؤقت.
  • \n
  • المجتمع: مجتمع ضخم، العديد من الإضافات والتوسعات.
  • \n
\n\n

تثبيت GORM

\n\n

يتم تثبيت GORM بالطريقة القياسية لحزم Go. تأكد من تثبيت Go (الإصدار 1.18+).

\n\n
go get -u gorm.io/gorm\ngo get -u gorm.io/driver/sqlite  # لـ SQLite\ngo get -u gorm.io/driver/mysql   # لـ MySQL\ngo get -u gorm.io/driver/postgres # لـ PostgreSQL\ngo get -u gorm.io/driver/sqlserver # لـ SQL Server
\n\n

ملاحظة: على عكس Python (pip) أو Node.js (npm)، لا يوجد في Go مدير حزم واحد. الأمر go get يقوم بتنزيل الكود المصدري وتجميعه في مشروعك.

\n\n

بداية سريعة مع مثال كود

\n\n

لنقم بإنشاء تطبيق بسيط لإدارة المستخدمين باستخدام SQLite.

\n\n
package main\n\nimport (\n    "fmt"\n    "gorm.io/driver/sqlite"\n    "gorm.io/gorm"\n)\n\n// User — نموذج بيانات، يتوافق مع جدول في قاعدة البيانات\ntype User struct {\n    ID    uint   `gorm:"primaryKey"`\n    Name  string `gorm:"size:100;not null"`\n    Email string `gorm:"uniqueIndex;size:255"`\n    Age   int\n}\n\nfunc main() {\n    // 1. الاتصال بقاعدة البيانات\n    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})\n    if err != nil {\n        panic("failed to connect database")\n    }\n\n    // 2. الترحيل التلقائي — إنشاء الجدول\n    db.AutoMigrate(&User{})\n\n    // 3. إنشاء سجل (Create)\n    user := User{Name: "إيفان بيتروف", Email: "ivan@example.com", Age: 30}\n    result := db.Create(&user)\n    if result.Error != nil {\n        fmt.Println("خطأ في الإنشاء:", result.Error)\n    }\n    fmt.Printf("تم إنشاء مستخدم بالمعرف: %d\\n", user.ID)\n\n    // 4. قراءة سجل (Read)\n    var readUser User\n    db.First(&readUser, user.ID) // البحث بواسطة المفتاح الأساسي\n    fmt.Printf("تم العثور على مستخدم: %+v\\n", readUser)\n\n    // 5. تحديث سجل (Update)\n    db.Model(&readUser).Update("Age", 31)\n    fmt.Printf("العمر المحدث: %d\\n", readUser.Age)\n\n    // 6. حذف سجل (Delete)\n    db.Delete(&readUser)\n    fmt.Println("تم حذف المستخدم")\n}
\n\n

الطرق/الدوال الأساسية في GORM

\n\n

1. gorm.Open(dialector, config)

\n

ما تفعله: تنشئ اتصالاً بقاعدة البيانات. تُرجع مثيلاً من *gorm.DB.

\n

المعلمات:

\n
    \n
  • dialector — مشغل قاعدة البيانات (مثل sqlite.Open، mysql.Open، postgres.Open).
  • \n
  • config — إعدادات GORM (gorm.Config).
  • \n
\n

مثال:

\n
db, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})
\n\n

2. db.AutoMigrate(models ...interface{})

\n

ما تفعله: تنشئ أو تحدث الجداول تلقائيًا

توصيات