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

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

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

ابدأ الدورة

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



Go (Golang) هي لغة حديثة قابلة للترجمة، وهي مثالية لبناء خدمات خلفية عالية التحميل. إحدى المهام الرئيسية لأي خلفية هي العمل مع قواعد البيانات. في هذه المقالة، سنشرح بالتفصيل كيفية الاتصال وتنفيذ عمليات CRUD مع اثنين من أشهر أنظمة إدارة قواعد البيانات: PostgreSQL العلائقية و MongoDB الموجهة للوثائق. ستحصل على أمثلة جاهزة للكود، وأفضل الممارسات، ونصائح لتحسين الاستعلامات.



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



قبل البدء، تأكد من تثبيت Go الإصدار 1.19 أو أعلى. للعمل مع قواعد البيانات، سنحتاج إلى حزمتين رئيسيتين:



  • database/sql — الحزمة القياسية في Go للعمل مع قواعد بيانات SQL (واجهة عامة)؛
  • lib/pq — برنامج تشغيل لـ PostgreSQL؛
  • go.mongodb.org/mongo-driver — برنامج التشغيل الرسمي لـ MongoDB.


تثبيت برامج التشغيل عبر go get:



go get github.com/lib/pqgo get go.mongodb.org/mongo-driver/mongo


أنشئ وحدة جديدة لمشروعك:



mkdir go-db-examplecd go-db-examplego mod init go-db-example


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



PostgreSQL هو نظام إدارة قواعد بيانات كائني-علائقي قوي. في Go، يتم العمل معه من خلال واجهة database/sql.



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



لننشئ ملف main.go ونكتب اتصالاً بقاعدة بيانات Postgres المحلية:



package main

import ( "database/sql" "fmt" "log"

_ "github.com/lib/pq")

func main() { // سلسلة الاتصال: user password dbname sslmode connStr := "user=postgres password=mysecretpassword dbname=testdb sslmode=disable" db, err := sql.Open("postgres", connStr) if err != nil { log.Fatal("خطأ في الاتصال:", err) } defer db.Close()

// التحقق من الاتصال err = db.Ping() if err != nil { log.Fatal("فشل الاتصال بقاعدة البيانات:", err) } fmt.Println("تم الاتصال بنجاح بـ PostgreSQL!") }


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



بعد الاتصال، لننشئ جدول users وندرج بعض السجلات:



// إنشاء الجدولcreateTable := `CREATE TABLE IF NOT EXISTS users (    id SERIAL PRIMARY KEY,    name VARCHAR(100) NOT NULL,    email VARCHAR(100) UNIQUE NOT NULL,    age INT);`

_, err = db.Exec(createTable)if err != nil { log.Fatal("خطأ في إنشاء الجدول:", err)}

// إدراج البياناتinsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3)`_, err = db.Exec(insert, "آنا بيتروفا", "anna@example.com", 28)if err != nil { log.Fatal("خطأ في الإدراج:", err)}fmt.Println("تمت إضافة البيانات")


2.3 قراءة البيانات (SELECT)



نستخدم QueryRow لسجل واحد و Query لسجلات متعددة:



// الحصول على سجل واحدvar id intvar name, email stringvar age sql.NullInt64

row := db.QueryRow("SELECT id, name, email, age FROM users WHERE email = $1", "anna@example.com")err = row.Scan(&id, &name, &email, &age)if err != nil { log.Fatal("خطأ في المسح:", err)}fmt.Printf("ID: %d, الاسم: %s, البريد الإلكتروني: %s, العمر: %v", id, name, email, age)

// الحصول على جميع السجلاتrows, err := db.Query("SELECT id, name, email FROM users ORDER BY id")if err != nil { log.Fatal("خطأ في الاستعلام:", err)}defer rows.Close()

for rows.Next() { err := rows.Scan(&id, &name, &email) if err != nil { log.Fatal("خطأ في قراءة الصف:", err) } fmt.Printf("User: %d | %s | %s", id, name, email)}


هام: تعامل دائمًا مع sql.NullInt64 للحقول القابلة للقيمة الخالية (nullable) لتجنب الذعر عند وجود قيم NULL.



3. العمل مع MongoDB

المدونات

توصيات الكتب