عمليات CRUD
CRUD Operations
تطبيق
~25 دقيقة
عمليات CRUD — CRUD Operations
CRUD هي العمليات الأربع الأساسية لأي تطبيق يتعامل مع بيانات: الإنشاء (Create)، القراءة (Read)، التحديث (Update)، والحذف (Delete). سنتعلم كيف ننفذها في Go بطريقة آمنة واحترافية.
بنية المشروع النموذجية
main.go
Output:
العبارات المُعدّة — Prepared Statements
العبارات المُعدّة تُحسّن الأداء عند تكرار نفس الاستعلام مع قيم مختلفة:
main.go
Output:
المعاملات — Transactions
المعاملات تضمن أن مجموعة عمليات تنجح كلها أو لا شيء (atomicity):
main.go
Output:
نمط المعاملة الفعلي
func TransferMoney(db *sql.DB, fromID, toID int, amount float64) error {
// بدء المعاملة — Begin transaction
tx, err := db.Begin()
if err != nil {
return fmt.Errorf("بدء المعاملة: %w", err)
}
// التراجع التلقائي — Auto rollback
defer tx.Rollback()
// خصم من المُرسل — Deduct from sender
_, err = tx.Exec(
"UPDATE accounts SET balance = balance - $1 WHERE id = $2 AND balance >= $1",
amount, fromID,
)
if err != nil {
return fmt.Errorf("خصم: %w", err)
}
// إضافة للمُستقبل — Add to receiver
_, err = tx.Exec(
"UPDATE accounts SET balance = balance + $1 WHERE id = $2",
amount, toID,
)
if err != nil {
return fmt.Errorf("إيداع: %w", err)
}
// تأكيد المعاملة — Commit
return tx.Commit()
}
أخطاء شائعة
خطأ 1: نسيان defer rows.Close()
// ❌ تسرب اتصال!
rows, _ := db.Query("SELECT ...")
for rows.Next() { ... }
// ✅ أغلق دائماً
rows, _ := db.Query("SELECT ...")
defer rows.Close()
خطأ 2: استخدام Rollback بدون defer
// ❌ إذا حدث panic لن يتم Rollback
tx, _ := db.Begin()
// ... عمليات
tx.Commit()
// ✅ defer Rollback آمن (لا يفعل شيئاً بعد Commit)
tx, _ := db.Begin()
defer tx.Rollback()
// ... عمليات
return tx.Commit()
تحدي — Challenge
أنشئ حسابين وحوّل 200 ريال من أحمد (1000) لسارة (1000)