العمل مع قواعد البيانات في Go: PostgreSQL و MongoDB للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا Go وقواعد البيانات زوج مثالي

\n

Go (Golang) هي لغة حديثة ومترجمة، طورتها Google. مزاياها الرئيسية هي الأداء العالي، البساطة، والدعم المدمج للتوازي. عندما يتعلق الأمر بالعمل مع قواعد البيانات، تقدم Go مكتبات قياسية قوية وبرامج تشغيل طرف ثالث شهيرة لأي نظام إدارة قواعد بيانات.

\n

في هذه المقالة، سنشرح كيفية الاتصال وتنفيذ العمليات الأساسية مع أشهر قاعدتي بيانات: قاعدة البيانات العلائقية PostgreSQL وقاعدة البيانات المستندية MongoDB. المادة موجهة للمطورين المبتدئين الذين هم على دراية بالفعل بأساسيات بناء جملة Go.

\n\n

1. إعداد البيئة وتثبيت برامج التشغيل

\n

قبل كتابة الكود، تأكد من تثبيت Go (الإصدار 1.21+). للعمل مع قواعد البيانات، سنحتاج إلى برامج تشغيل. قم بتثبيتها باستخدام الأوامر التالية:

\n
go get github.com/lib/pq          // لـ PostgreSQL\ngo get go.mongodb.org/mongo-driver // لـ MongoDB
\n

تأكد أيضًا من تشغيل خوادم قواعد البيانات المناسبة على جهازك (محليًا أو عبر Docker).

\n\n

1.1. هيكل المشروع

\n

أنشئ ملف main.go. سيتم تركيز كل المنطق فيه للتبسيط. في المشاريع الحقيقية، يجب فصل الكود إلى حزم.

\n\n

2. العمل مع PostgreSQL في Go

\n

PostgreSQL هو نظام إدارة قواعد بيانات علائقية قوي. للعمل معه في Go، نستخدم الحزمة database/sql وبرنامج التشغيل lib/pq.

\n\n

2.1. الاتصال بقاعدة البيانات

\n

لننشئ دالة اتصال. تحتوي سلسلة الاتصال (DSN) على المضيف، المنفذ، اسم المستخدم، وقاعدة البيانات.

\n
package main\n\nimport (\n    "database/sql"\n    "fmt"\n    "log"\n\n    _ "github.com/lib/pq"\n)\n\nfunc main() {\n    connStr := "host=localhost port=5432 user=postgres password=secret dbname=testdb sslmode=disable"\n    db, err := sql.Open("postgres", connStr)\n    if err != nil {\n        log.Fatal("خطأ في الاتصال:", err)\n    }\n    defer db.Close()\n\n    // التحقق من الاتصال\n    err = db.Ping()\n    if err != nil {\n        log.Fatal("فشل إنشاء الاتصال:", err)\n    }\n    fmt.Println("تم الاتصال بنجاح بـ PostgreSQL!")\n}
\n

هام: sql.Open لا ينشئ اتصالًا فعليًا، بل مجرد مجموعة اتصالات. يحدث الاتصال الفعلي عند أول طلب أو استدعاء Ping().

\n\n

2.2. إنشاء جدول وإدراج البيانات

\n

الآن سننشئ جدول users ونضيف بعض السجلات.

\n
// إنشاء الجدول\ncreateTable := `\nCREATE TABLE IF NOT EXISTS users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    email VARCHAR(100) UNIQUE NOT NULL,\n    age INT\n);`\n_, err = db.Exec(createTable)\nif err != nil {\n    log.Fatal("خطأ في إنشاء الجدول:", err)\n}\n\n// إدراج البيانات\ninsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3)`\n_, err = db.Exec(insert, "إيفان بيتروف", "ivan@example.com", 30)\nif err != nil {\n    log.Fatal("خطأ في الإدراج:", err)\n}\nfmt.Println("تمت إضافة البيانات")
\n

لاحظ استخدام العناصر النائبة $1، $2 — هذه حماية من حقن SQL.

\n\n

2.3. قراءة وتحديث البيانات

\n

سننفذ استعلامًا لاسترجاع البيانات ونقوم بتحديث عمر المستخدم.

\n
// قراءة البيانات\nrows, err := db.Query("SELECT id, name, email, age FROM users")\nif err != nil {\n    log.Fatal(err)\n}\ndefer rows.Close()\n\nfor rows.Next() {\n    var id int\n    var name, email string\n    var age int\n    err := rows.Scan(&id, &name, &email, &age)\n    if err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf("ID: %d, الاسم: %s, البريد الإلكتروني: %s, العمر: %d\\n", id, name, email, age)\n}\n\n// التحديث\n_, err = db.Exec("UPDATE users SET age = $1 WHERE name = $2", 31, "إيفان بيتروف")\nif err != nil {\n    log.Fatal(err)\n}\nfmt.Println("تم تحديث العمر")
\n\n

3. العمل مع MongoDB

المدونات

توصيات الكتب