ما هو GORM ولماذا هو مطلوب؟
\n\nGORM هي مكتبة 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
تثبيت GORM
\n\nيتم تثبيت GORM بالطريقة القياسية لحزم Go. تأكد من تثبيت Go (الإصدار 1.18+).
\n\ngo 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لنقم بإنشاء تطبيق بسيط لإدارة المستخدمين باستخدام SQLite.
\n\npackage 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\n1. gorm.Open(dialector, config)
\nما تفعله: تنشئ اتصالاً بقاعدة البيانات. تُرجع مثيلاً من *gorm.DB.
\nالمعلمات:
\n- \n
dialector— مشغل قاعدة البيانات (مثل sqlite.Open، mysql.Open، postgres.Open). \n config— إعدادات GORM (gorm.Config). \n
مثال:
\ndb, err := gorm.Open(mysql.Open("user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"), &gorm.Config{})\n\n2. db.AutoMigrate(models ...interface{})
\nما تفعله: تنشئ أو تحدث الجداول تلقائيًا