عمليات CRUD
أنشئ واقرأ وحدّث واحذف
عمليات CRUD درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
عمليات CRUD باستخدام GORM
تحوّل GORM العمليات الأساسية الأربع، وهي Create وRead وUpdate وDelete، إلى استدعاءات أساليب على *gorm.DB. وتمرّر مؤشرات إلى البنى، ثم تنشئ GORM أوامر SQL.
Create
تُدرج Create سجلًا. وبعد تنفيذها، تملأ GORM المفتاح الأساسي والطوابع الزمنية للبنية بالقيم القادمة من قاعدة البيانات.
user := User{Name: "Ada", Email: "ada@example.com"}
result := db.Create(&user)
fmt.Println(user.ID, result.RowsAffected)القراءة باستخدام First
تجلب First أول سجل مطابق مرتبًا حسب المفتاح الأساسي. مرّر مؤشرًا لاستلام النتيجة؛ وتُمرّر الشروط كوسائط إضافية.
var user User
db.First(&user, 1) // by primary key
db.First(&user, "email = ?", "ada@example.com")قراءة عدة سجلات باستخدام Find
تُحمّل Find عدة صفوف في شريحة. ومن دون شروط، تعيد جميع الصفوف؛ ومع Where تجري التصفية.
var users []User
db.Where("age > ?", 18).Find(&users)Update
يحدّث Save جميع حقول السجل. أما Update وUpdates فيغيّران أعمدة محددة، مما يتجنب الكتابة فوق الحقول التي لم تقصد تغييرها.
db.Model(&user).Update("name", "Ada L.")
db.Model(&user).Updates(User{Name: "Ada", Age: 36})مشكلة القيم الصفرية
عند التحديث باستخدام بنية، يتجاهل GORM الحقول ذات القيم الصفرية (0 وfalse و""). ولتحديث عمود إلى قيمة صفرية، مرّر خريطة بدلًا من بنية.
db.Model(&user).Updates(map[string]interface{}{"age": 0, "active": false})Delete
تزيل Delete سجلًا. إذا كان للنموذج حقل DeletedAt، يكون ذلك حذفًا منطقيًا؛ إذ يُضبط الطابع الزمني بدلًا من إزالة الصف.
db.Delete(&user, 1)محاكاة قابلة للتشغيل لعمليات CRUD
تحتاج GORM إلى قاعدة بيانات حقيقية، لذلك يصوّر هذا المثال القابل للتشغيل عمليات الإنشاء والقراءة والتحديث والحذف على شريحة في الذاكرة لعرض دورة الحياة.
package main
import "fmt"
type User struct {
ID int
Name string
}
func main() {
var users []User
next := 1
// Create
u := User{ID: next, Name: "Ada"}
users = append(users, u)
next++
// Read
fmt.Println("read:", users[0])
// Update
users[0].Name = "Ada L."
fmt.Println("updated:", users[0])
// Delete
users = users[:0]
fmt.Println("count after delete:", len(users))
}التحقق من الأخطاء
يعيد كل استدعاء لـ GORM قيمة *gorm.DB يحتوي حقلها Error على أي فشل. ويؤدي عدم العثور على سجل إلى ظهور gorm.ErrRecordNotFound عند استخدام First.
if err := db.First(&user, 99).Error; err == gorm.ErrRecordNotFound {
fmt.Println("no such user")
}تسلسل استدعاءات الأساليب
تستخدم GORM منشئًا قابلًا للتسلسل: db.Where(...).Order(...).Limit(...).Find(&users). يضيّق كل أسلوب نطاق الاستعلام، وينفّذه الأسلوب النهائي (Find أو First).
إدراج دفعي
مرّر شريحة إلى Create لإدراج صفوف عديدة في عبارة واحدة. وتقسّم CreateInBatches الشرائح الكبيرة جدًا إلى دفعات لتبقى ضمن الحدود.
db.Create(&[]User{{Name: "A"}, {Name: "B"}})تحقق سريع
اختبر معرفتك بعمليات CRUD.
مراجعة
لقد تعلمت عمليات CRUD:
- تُدرج Create السجلات وتملأ المفتاح الأساسي تلقائيًا
- تقرأ First وFind صفًا واحدًا وعدة صفوف
- تعدّل Save وUpdate وUpdates السجلات؛ وتجبر الخرائط استخدام القيم الصفرية
- ينفّذ Delete حذفًا منطقيًا عند وجود DeletedAt
- تحقق من حقل Error؛ وسلسل الأساليب للاستعلامات المعقدة
الأسئلة الشائعة
هل درس «عمليات CRUD» مجاني؟
نعم — نص درس «عمليات CRUD» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «عمليات CRUD»؟
أنشئ واقرأ وحدّث واحذف تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «عمليات CRUD»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.