العمل مع قواعد البيانات في Go: PostgreSQL و MongoDB للمبتدئين
Go (Golang) هي لغة مترجمة حديثة اكتسبت شعبية بفضل أدائها العالي وبساطتها ودعمها المدمج للتزامن. عند تطوير خدمات الويب والتطبيقات، تنشأ دائمًا الحاجة إلى التفاعل مع قواعد البيانات. في هذه المقالة، سننظر في كيفية العمل مع نظامي إدارة قواعد بيانات شائعين: PostgreSQL العلائقية و MongoDB الموجهة للمستندات. المادة موجهة للمطورين المبتدئين الذين هم على دراية بأساسيات Go.
1. إعداد البيئة وتثبيت برامج التشغيل
قبل البدء، تأكد من تثبيت Go (الإصدار 1.16+) وتشغيل أنظمة إدارة قواعد البيانات المناسبة. للعمل مع PostgreSQL، ستحتاج إلى برنامج التشغيل lib/pq، وبالنسبة لـ MongoDB، ستحتاج إلى برنامج التشغيل الرسمي mongo-go-driver.
go get github.com/lib/pqgo get go.mongodb.org/mongo-driver/mongoأنشئ وحدة جديدة:
go mod init example.com/db-demo2. العمل مع PostgreSQL في Go
PostgreSQL هي قاعدة بيانات علائقية قوية تدعم SQL. في Go، نستخدم الحزمة القياسية database/sql مع برنامج التشغيل lib/pq.
2.1 الاتصال بقاعدة البيانات
للاتصال، يجب تحديد سلسلة الاتصال (DSN) بالتنسيق: host=... port=... user=... password=... dbname=... sslmode=disable.
package main
import ( "database/sql" "fmt" "log" _ "github.com/lib/pq")
func main() { connStr := "host=localhost port=5432 user=postgres password=secret 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 إنشاء جدول وعمليات CRUD
لننظر في إنشاء جدول 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)}
// إدراج البياناتsqlInsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING id`var userID interr = db.QueryRow(sqlInsert, "إيفان بيتروف", "ivan@example.com", 30).Scan(&userID)if err != nil { log.Fatal(err)}fmt.Printf("تمت إضافة مستخدم بالمعرف: %d", userID)
// استعلام البياناتrows, err := db.Query("SELECT id, name, email, age FROM users")if err != nil { log.Fatal(err)}defer rows.Close()
for rows.Next() { var u struct { ID int Name string Email string Age int } err := rows.Scan(&u.ID, &u.Name, &u.Email, &u.Age) if err != nil { log.Fatal(err) } fmt.Printf("المعرف: %d, الاسم: %s, البريد الإلكتروني: %s, العمر: %d", u.ID, u.Name, u.Email, u.Age)}2.3 استخدام الاستعلامات المحضرة
الاستعلامات المحضرة (prepared statements) تزيد من الأمان والأداء، خاصة في العمليات المتكررة.
stmt, err := db.Prepare("UPDATE users SET age = $1 WHERE id = $2")if err != nil { log.Fatal(err)}defer stmt.Close()
_, err = stmt.Exec(35, 1)if err != nil { log.Fatal(err)}fmt.Println("تم تحديث عمر المستخدم")3. العمل مع MongoDB في Go
MongoDB هي قاعدة بيانات NoSQL موجهة للمستندات. في Go، يتم العمل معها من خلال برنامج التشغيل الرسمي mongo-go-driver، الذي يستخدم السياقات لإدارة وقت تنفيذ العمليات.
3.1 الاتصال بـ MongoDB
pa