Go-তে SQL ডাটাবেসের সাথে সংযোগ (MySQL, PostgreSQL)
Go-তে ডাটাবেসের সাথে সংযোগ স্থাপন এবং ডাটা পরিচালনা করার জন্য আমরা সাধারণত database/sql প্যাকেজ ব্যবহার করি। এছাড়া MySQL এবং PostgreSQL-এর জন্য আলাদা প্যাকেজও প্রয়োজন হয়, যেমন github.com/go-sql-driver/mysql এবং **github.com/lib/pq**। এই প্যাকেজগুলির মাধ্যমে আপনি MySQL এবং PostgreSQL ডাটাবেসের সাথে সংযোগ স্থাপন করতে পারবেন, SQL কোয়েরি চালাতে পারবেন এবং ডাটাবেসে ডেটা INSERT, SELECT, UPDATE, DELETE করতে পারবেন।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে Go তে MySQL এবং PostgreSQL ডাটাবেসের সাথে সংযোগ স্থাপন করতে হয়।
১. MySQL ডাটাবেসের সাথে সংযোগ
১.১ MySQL ড্রাইভার ইনস্টল করা
প্রথমে, MySQL ড্রাইভার ইনস্টল করতে হবে। Go-তে MySQL ড্রাইভার ইনস্টল করার জন্য github.com/go-sql-driver/mysql প্যাকেজ ব্যবহার করা হয়।
go get -u github.com/go-sql-driver/mysql১.২ MySQL ডাটাবেসের সাথে সংযোগ এবং কোয়েরি চালানো
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql" // MySQL ড্রাইভার
)
func main() {
// MySQL ডাটাবেসের সাথে সংযোগ
dsn := "root:password@tcp(127.0.0.1:3306)/mydb" // এখানে আপনার ইউজার, পাসওয়ার্ড, হোস্ট এবং ডাটাবেস নাম উল্লেখ করুন
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// ডাটাবেসে একটি সিম্পল SELECT কোয়েরি চালানো
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// ফলাফল প্রিন্ট করা
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
log.Fatal(err)
}
fmt.Println(id, name)
}
// কোনও ত্রুটি থাকলে চেক করা
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}এখানে:
sql.Open("mysql", dsn): এটি MySQL ডাটাবেসের সাথে সংযোগ স্থাপন করে।db.Query(): SQL কোয়েরি চালানোর জন্য ব্যবহৃত হয়।rows.Scan(): কোয়েরির ফলাফল স্ক্যান করার জন্য ব্যবহৃত হয়।
২. PostgreSQL ডাটাবেসের সাথে সংযোগ
২.১ PostgreSQL ড্রাইভার ইনস্টল করা
PostgreSQL ডাটাবেসের সাথে কাজ করার জন্য github.com/lib/pq প্যাকেজ ব্যবহার করা হয়। এই প্যাকেজটি ইনস্টল করতে:
go get -u github.com/lib/pq২.২ PostgreSQL ডাটাবেসের সাথে সংযোগ এবং কোয়েরি চালানো
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq" // PostgreSQL ড্রাইভার
)
func main() {
// PostgreSQL ডাটাবেসের সাথে সংযোগ
connStr := "user=postgres password=password dbname=mydb sslmode=disable" // এখানে আপনার ইউজার, পাসওয়ার্ড, ডাটাবেস নাম এবং অন্যান্য সেটিংস উল্লেখ করুন
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// ডাটাবেসে একটি সিম্পল SELECT কোয়েরি চালানো
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// ফলাফল প্রিন্ট করা
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
log.Fatal(err)
}
fmt.Println(id, name)
}
// কোনও ত্রুটি থাকলে চেক করা
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}এখানে:
sql.Open("postgres", connStr): এটি PostgreSQL ডাটাবেসের সাথে সংযোগ স্থাপন করে।db.Query(): SQL কোয়েরি চালানোর জন্য ব্যবহৃত হয়।rows.Scan(): কোয়েরির ফলাফল স্ক্যান করার জন্য ব্যবহৃত হয়।
৩. SQL কোয়েরি দিয়ে Data Manipulation (INSERT, UPDATE, DELETE)
৩.১ INSERT Query
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL ডাটাবেসের সাথে সংযোগ
dsn := "root:password@tcp(127.0.0.1:3306)/mydb"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// INSERT কোয়েরি চালানো
stmt, err := db.Prepare("INSERT INTO users(name) VALUES(?)")
if err != nil {
log.Fatal(err)
}
res, err := stmt.Exec("John Doe")
if err != nil {
log.Fatal(err)
}
lastID, err := res.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted record with ID:", lastID)
}এখানে:
db.Prepare(): এটি একটি SQL স্টেটমেন্ট প্রস্তুত করে যা পরবর্তীতে এক্সিকিউট করা যায়।stmt.Exec(): এটি SQL স্টেটমেন্ট চালিয়ে ডাটা ইনসার্ট করে।
৩.২ UPDATE Query
stmt, err := db.Prepare("UPDATE users SET name=? WHERE id=?")
if err != nil {
log.Fatal(err)
}
_, err = stmt.Exec("Jane Doe", 1)
if err != nil {
log.Fatal(err)
}
fmt.Println("Record updated successfully!")৩.৩ DELETE Query
stmt, err := db.Prepare("DELETE FROM users WHERE id=?")
if err != nil {
log.Fatal(err)
}
_, err = stmt.Exec(1)
if err != nil {
log.Fatal(err)
}
fmt.Println("Record deleted successfully!")৪. Error Handling
Go-তে SQL কোয়েরি চালানোর সময় ত্রুটির ক্ষেত্রে error চেক করা খুব গুরুত্বপূর্ণ। সবসময় ত্রুটি চেক করে পরবর্তী পদক্ষেপ নেওয়া উচিত। এটি log.Fatal(err) বা log.Println(err) ব্যবহার করে করা হয়।
৫. Transaction Management (ট্রানজেকশন ব্যবস্থাপনা)
Go তে ডাটাবেসের সাথে কাজ করার সময় Transaction ব্যবহার করা যেতে পারে। এটি একাধিক SQL স্টেটমেন্টকে একসাথে পরিচালনা করতে সাহায্য করে।
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
_, err = tx.Exec("INSERT INTO users(name) VALUES('Alice')")
if err != nil {
tx.Rollback()
log.Fatal(err)
}
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
fmt.Println("Transaction committed successfully!")এখানে:
db.Begin(): একটি ট্রানজেকশন শুরু করে।tx.Rollback(): ট্রানজেকশন বাতিল করে, যদি কোনো ত্রুটি ঘটে।tx.Commit(): ট্রানজেকশন সফল হলে সেটা কমিট করে।
সারসংক্ষেপ
- MySQL ডাটাবেসের সাথে সংযোগ: Go তে MySQL সংযোগের জন্য
github.com/go-sql-driver/mysqlপ্যাকেজ ব্যবহার করা হয়। - PostgreSQL ডাটাবেসের সাথে সংযোগ: PostgreSQL সংযোগের জন্য
github.com/lib/pqপ্যাকেজ ব্যবহার করা হয়। - SQL কোয়েরি এবং Data Manipulation: Go তে SQL কোয়েরি যেমন SELECT, INSERT, UPDATE, DELETE চালাতে
database/sqlপ্যাকেজ ব্যবহার করা হয়। - Error Handling: SQL স্টেটমেন্ট চালানোর সময়ে ত্রুটি চেক করা উচিত।
- Transaction Management: একাধিক SQL কোয়েরি একসাথে পরিচালনা করতে ট্রানজেকশন ব্যবহৃত হয়।
Go তে SQL ডাটাবেস সংযোগ খুবই শক্তিশালী এবং সহজ, যা আপনাকে কার্যকরী ডেটাবেস পরিচালনা করতে সহায়তা করে।
Read more