با یک بسته انتزاعی ساده پایگاه داده، استفاده از SQL از Go ساده تر از آن چیزی است که فکر می کنید.
پایگاه های داده SQL مجموعه ای از داده ها را در ردیف ها و ستون ها ذخیره می کنند. شما می توانید داده ها را در یک سیستم مدیریت پایگاه داده رابطه ای (RDBMS) با استفاده از زبان SQL بازیابی و به روز کنید. از میان بسیاری از پایگاه های داده SQL موجود، محبوب ترین آنها MySQL، PostgreSQL، Microsoft SQL Server و SQLite هستند.
عملکرد برای تعامل با پایگاه داده در Go در بسته پایگاه داده/sql، بخشی از کتابخانه استاندارد است.
بسته پایگاه داده/sql با استفاده از درایورها با پایگاه داده های SQL تعامل دارد. می توانید یک بسته درایور مناسب برای RDBMS خود وارد کنید و از آن برای تعامل با پایگاه داده استفاده کنید.
شروع کار با پایگاه های داده SQL در Go
بسته پایگاه داده/sql یک رابط عمومی برای پایگاه داده های رابطه ای است. برای کار با یک سرور پایگاه داده خاص، باید از یکی از درایورهای موجود استفاده کنید.
خوشبختانه، لازم نیست نگران اجرای خاصی فراتر از درایور باشید. بسته پایگاه داده/sql مستقل از سروری که به آن متصل هستید، عملیات پایگاه داده را مدیریت می کند.
برخی از محبوب ترین درایورهای پایگاه داده Go عبارتند از:
- درایور Go-SQL (MySQL)
- PQ (PostgreSQL)
- Go-SQLite3 (SQLite)
- MSSQL DB (Microsoft SQL Server)
میتوانید از لیست درایورهای LibHunt برای یافتن معادلهایی برای سایر انواع پایگاه داده استفاده کنید. این لیست همچنین محبوبیت نسبی هر سیستم پایگاه داده را نشان می دهد:
نصب و وارد کردن درایورهای پایگاه داده Go
هنگامی که یک فضای کاری Go ایجاد کردید و یک فایل Go modules را مقداردهی اولیه کردید، درایوری را نصب کنید که با سیستم پایگاه داده شما مطابقت دارد. به عنوان مثال، برای نصب درایور MySQL یا SQLite یکی از دستورات زیر را در پوشه فضای کاری خود اجرا کنید:
go get -u github.com/go-sql-driver/mysql
go get github.com/mattn/go-sqlite3
پس از نصب درایور خود، آن را برای عوارض جانبی با پیشوند زیر خط قبل از بسته وارد کنید. به عنوان مثال، برای وارد کردن درایور MySQL در کنار بسته پایگاه داده/sql:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
با وارد کردن بسته درایور برای عوارض جانبی، می توانید از آن برای اتصال به پایگاه داده و اجرای عملیات روی آن استفاده کنید.
اتصال به پایگاه داده SQL با Go
پس از وارد کردن درایورهای پایگاه داده، می توانید با استفاده از روش Open بسته پایگاه داده/sql یک اتصال پایگاه داده ایجاد کنید. این روش نام و مسیر درایور را به پایگاه داده (برای SQLite) یا یک رشته اتصال (برای MySQL) می برد. به عنوان مثال، از یکی از موارد زیر استفاده کنید:
db, err := sql.Open("sqlite3", "models/testdb.db") // SQLite
db, err := sql.Open("mysql", "user:password@/dbname") // MySQL
هنگامی که سعی کردید اتصال را باز کنید، به یاد داشته باشید که خطا را بررسی کنید:
if err != nil {
log.Fatalln(err)
}
بسته به سیستم پایگاه داده شما، اگر پایگاه داده وجود نداشته باشد، روش Open ممکن است با خطا مواجه شود. هنگامی که به یک پایگاه داده متصل شدید، میتوانید با استفاده از نمونه پایگاه دادهای که Open برمیگرداند، کوئریها را اجرا کنید و عباراتی را آماده کنید.
اجرای دستورات SQL
می توانید دستورات SQL را با استفاده از روش Prepare نمونه پایگاه داده خود اجرا کنید. متد Prepare یک دستور SQL را می گیرد و یک دستور آماده را برای اجرا در کنار یک شی خطا برمی گرداند. به عنوان مثال، اگر می خواهید یک جدول جدید ایجاد کنید:
command, err := db.Prepare("CREATE TABLE IF NOT EXISTS login(username TEXT, password TEXT)")
عبارت بالا جدولی به نام login ایجاد می کند، در صورتی که از قبل وجود نداشته باشد. جدول جدید دارای فیلدهایی با نام کاربری و رمز عبور است که هر کدام از نوع TEXT هستند.
اگر مقادیری را از برنامه خود در جستارهای خود درج می کنید، می توانید از علامت علامت سوال (؟) برای نشان دادن متغیرهایی استفاده کنید و سپس پارامترها را در اجرای دستور ارسال کنید.
command, err := db.Prepare("INSERT INTO login(username, password) values(?,?)")
هنگامی که یک دستور آماده را ایجاد کردید، می توانید آن را با استفاده از روش Exec آن اجرا کنید. این روش به شما امکان می دهد مقادیر پارامتر را از برنامه خود ارسال کنید:
exec, err := command.Exec(value1, Value2)
if err != nil {
return
}
اولین مقداری که Exec() برمی گرداند، نتیجه پرس و جوی SQL در پایگاه داده شما است. با استفاده از این نتیجه پرس و جو، می توانید تعداد ردیف های تحت تأثیر یا آخرین شناسه درج شده را بررسی کنید:
affected, err := exec.RowsAffected()
if err != nil {
return
}
fmt.Println(affected)
id, err := exec.LastInsertId()
if err != nil {
return
}
fmt.Println(id)
واکشی نتایج پرس و جو
بسته پایگاه داده/sql به شما امکان می دهد نتایج پایگاه داده را با استفاده از روش Query یک نمونه پایگاه داده پرس و جو کنید:
rows, err := db.Query("SELECT * FROM User")
if err != nil {
return
}
متد Query یک ساختار ردیفی را برمیگرداند که میتوانید از آن برای کار با مجموعه نتایج خود استفاده کنید. برای مثال، میتوانید از متد Next نمونه ردیفهای خود برای تکرار روی آن و کار با ردیفهای جداگانه استفاده کنید:
var username, password string
for rows.Next() {
err := rows.Scan(&username, &password)
if err != nil {
log.Fatalln(err)
}
fmt.Println(username, password)
}
در مثال بالا، دو متغیر رشته – نام کاربری و رمز عبور – هر ستون را نشان میدهند. روش اسکن ردیف فعلی را به آن متغیرهای مربوطه رمزگشایی می کند.
پایگاه های داده SQL همیشه مفید هستند
استفاده از پایگاه داده در Go با بسته پایگاه داده/sql ساده است. می توانید از آن برای پرس و جو و اجرای دستورات SQL در Go به راحتی استفاده کنید.
پایگاه داده های SQL در هسته بسیاری از برنامه ها قرار دارند، به ویژه آنهایی که با مجموعه داده های بزرگ یا پیچیده سروکار دارند. میتوانید از پایگاههای دادهای مانند پایگاه داده SQLite در حافظه برای پروژههای ساده خود مانند خراش دادن وب و ساخت رباتها استفاده کنید.
دانش مناسب از SQL و سیستم های مدیریت پایگاه داده برای استفاده کارآمد از آنها در برنامه های خود ضروری است. با این حال، اگر ترجیح می دهید SQL را یاد نگیرید، می توانید نحوه استفاده از ORM ها را برای تعامل با پایگاه های داده SQL در Go یاد بگیرید.