النماذج وAutoMigrate
عرّف المخطط ورحّله
النماذج وAutoMigrate درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما هو GORM؟
GORM هو أشهر ORM للغة Go. فهو يربط بنيات Go بجداول قاعدة البيانات، بحيث تعمل مع الكائنات بدلًا من SQL الخام. ويدعم PostgreSQL وMySQL وSQLite وغيرها.
- ربط البنية بالجدول
- عمليات ترحيل تلقائية
- العلاقات والخطافات
تعريف نموذج
النموذج هو بنية Go. ويصبح كل حقل مُصدَّر عمودًا. تؤدي مضمنة gorm.Model إلى إضافة حقول ID وCreatedAt وUpdatedAt وDeletedAt.
type User struct {
gorm.Model
Name string
Email string
Age int
}وسوم الحقول
تخصص وسوم البنية الأعمدة. يمكنك ضبط الحجم والتفرّد والفهارس والقيم الافتراضية باستخدام وسم gorm. يُكتب الوسم بين علامتي backtick بعد نوع الحقل، مثل gorm:"uniqueIndex;size:255".
type User struct {
// ID uint tag: gorm:"primaryKey"
// Email string tag: gorm:"uniqueIndex;size:255"
// Name string tag: gorm:"not null"
ID uint
Email string
Name string
}اصطلاحات التسمية
يحوّل GORM الأسماء إلى صيغة الجمع وإلى snake_case افتراضيًا: إذ تُربط بنية User بجدول users، ويُربط الحقل CreatedAt بالعمود created_at. ويمكنك تجاوز هذه القواعد.
الفتح باستخدام GORM
تأخذ gorm.Open موصّلًا لقاعدة بياناتك، وتعيد قيمة *gorm.DB. ويغلّف هذا المقبض مجمّع الاتصالات.
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}AutoMigrate
تنشئ AutoMigrate الجداول والأعمدة والفهارس المفقودة بما يطابق بنياتك. وهي عملية إضافية؛ فلا تحذف الأعمدة ولا تغيّر الأنواع بطريقة مدمّرة.
db.AutoMigrate(&User{}, &Product{})ما الذي لا تنفذه AutoMigrate؟
لا تحذف AutoMigrate الأعمدة غير المستخدمة ولا تصغّر الأنواع أبدًا، لتجنب فقدان البيانات. أما إعادة التسمية والحذف وتغييرات الأنواع فتحتاج إلى أدوات ترحيل صريحة.
محاكاة قابلة للتشغيل لربط النماذج
تحتاج GORM إلى برنامج تشغيل حقيقي لقاعدة البيانات، لذلك يحاكي هذا المثال القابل للتشغيل ربط الجداول والأعمدة بصيغة snake_case الذي تنفذه AutoMigrate.
package main
import (
"fmt"
"strings"
)
func toSnake(s string) string {
var b strings.Builder
for i, r := range s {
if i > 0 && r >= 65 && r <= 90 {
b.WriteByte(95)
}
if r >= 65 && r <= 90 {
r = r + 32
}
b.WriteRune(r)
}
return b.String()
}
func main() {
model := "User"
fields := []string{"ID", "Name", "CreatedAt"}
fmt.Println("table:", toSnake(model)+"s")
for _, f := range fields {
fmt.Println("column:", toSnake(f))
}
}حقل DeletedAt
إذا كانت بنيتك تضمّن gorm.Model أو تحتوي على حقل gorm.DeletedAt، فإن GORM يفعّل الحذف المنطقي. تحصل الصفوف المحذوفة على طابع زمني وتُخفى عن الاستعلامات بدلًا من إزالتها.
أسماء الجداول المخصصة
نفّذ أسلوب TableName على النموذج لتجاوز الاسم الافتراضي. يفيد ذلك عندما يستخدم مخططك أسماء لا تطابق اصطلاحات GORM.
func (User) TableName() string {
return "app_users"
}ملاحظة حول الحزمة الخارجية
توجد GORM وموصلاتها خارج المكتبة القياسية، ولذلك تتطلب go get gorm.io/gorm وبرنامج تشغيل مثل gorm.io/driver/postgres. المقاطع الخاصة بـ GORM هنا توضيحية.
تحقق سريع
اختبر معرفتك بالنماذج.
مراجعة
لقد تعلمت النماذج وAutoMigrate:
- تُربط البنى بالجداول؛ وتضيف gorm.Model حقلي ID والطوابع الزمنية
- تضبط الوسوم المفاتيح الأساسية والفهارس والقيود
- التسمية الافتراضية تكون بصيغة الجمع وsnake_case
- AutoMigrate عملية إضافية وليست مدمّرة أبدًا
- يُفعّل DeletedAt الحذف المنطقي
الأسئلة الشائعة
هل درس «النماذج وAutoMigrate» مجاني؟
نعم — نص درس «النماذج وAutoMigrate» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «النماذج وAutoMigrate»؟
عرّف المخطط ورحّله تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «النماذج وAutoMigrate»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- النماذج وAutoMigrate
- عمليات CRUD
- الارتباطات
- الخطافات والنطاقات