database/sql وبرامج التشغيل
إعداد DB وQueryRow وScan ومجموعات الاتصالات
database/sql وبرامج التشغيل درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
نظرة عامة على database/sql
تُعدّ database/sql طبقة التجريد القياسية لقواعد البيانات في Go. وهي تدير مجموعة اتصالات وتعمل مع أي قاعدة بيانات عبر مكوّن إضافي لبرنامج التشغيل.
تسجيل برنامج تشغيل
استوردوا حزمة برنامج التشغيل لتأثيراتها الجانبية (تسجيل برنامج التشغيل). ثم افتحوا اتصالًا:
import _ "github.com/lib/pq" // PostgreSQL driver
db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil { log.Fatal(err) }
defer db.Close()sql.Open مقابل db.Ping
لا ينشئ sql.Open اتصالًا — بل يتحقق من DSN. استدعوا db.Ping() أو db.PingContext(ctx) للتحقق من أن الاتصال لا يزال حيًا.
if err := db.Ping(); err != nil { log.Fatal(err) }الاستعلام عن الصفوف
استخدموا db.QueryContext لتنفيذ SELECT وفحص الصفوف:
rows, err := db.QueryContext(ctx, "SELECT id, name FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()
for rows.Next() {
var id int; var name string
rows.Scan(&id, &name)
}استعلام عن صف واحد
يُرجع db.QueryRowContext قيمة *Row للاستعلامات المتوقع أن تُرجع نتيجة واحدة على الأكثر:
var name string
err := db.QueryRowContext(ctx, "SELECT name FROM users WHERE id = $1", id).Scan(&name)
if errors.Is(err, sql.ErrNoRows) { /* not found */ }تنفيذ عمليات التعديل
استخدموا db.ExecContext مع INSERT وUPDATE وDELETE. وهو يُرجع Result يتضمن عدد الصفوف المتأثرة ومعرّف آخر إدراج.
result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()العبارات المُعدّة مسبقًا
حضّروا العبارة مرة واحدة ونفّذوها مرات عديدة بكفاءة:
stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
row := stmt.QueryRowContext(ctx, email)
}إعدادات مجموعة الاتصالات
اضبطوا المجموعة لبيئة الإنتاج:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)التحقق من rows.Err()
بعد حلقة الصفوف، تحققوا دائمًا من rows.Err() — فقد تكون الحلقة قد انتهت مبكرًا بسبب خطأ في الشبكة.
if err := rows.Err(); err != nil { return err }القيم الفارغة
استخدموا sql.NullString وsql.NullInt64 وغيرهما للتعامل مع قيم NULL في قاعدة البيانات، التي قد تؤدي بخلاف ذلك إلى panic عند فحصها في نوع Go غير مؤشّر.
var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }قائمة برامج التشغيل
برامج تشغيل شائعة: github.com/lib/pq (PostgreSQL)، وgithub.com/go-sql-driver/mysql (MySQL)، وmodernc.org/sqlite (SQLite، بلغة Go خالصة).
اختبار سريع
لماذا يجب عليكم دائمًا استدعاء rows.Close() والتحقق من rows.Err() بعد الاستعلام؟
مراجعة: database/sql
النقاط الأساسية:
- استوردوا برنامج التشغيل باستخدام _ لتأثيراته الجانبية؛ ثم استخدموا sql.Open وPing
- QueryContext ← rows.Next + Scan + rows.Close + rows.Err
- استخدموا ExecContext لعمليات التعديل، وQueryRowContext للصفوف المفردة
- اضبطوا SetMaxOpenConns وSetMaxIdleConns وSetConnMaxLifetime لمجموعة الاتصالات
الأسئلة الشائعة
هل درس «database/sql وبرامج التشغيل» مجاني؟
نعم — نص درس «database/sql وبرامج التشغيل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «database/sql وبرامج التشغيل»؟
إعداد DB وQueryRow وScan ومجموعات الاتصالات تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «database/sql وبرامج التشغيل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- database/sql وبرامج التشغيل
- sqlx: فحص البُنى والاستعلامات المسمّاة
- pgx: برنامج تشغيل PostgreSQL عالي الأداء
- المعاملات والترحيلات