GoDasturchi
What is database/sql?

What is database/sql?

database/sql nima?

database/sql — Go standart kutubxonasining ma'lumotlar bazasi bilan ishlash paketi. Muhim narsa: u o'zi hech qanday bazaga ulanmaydi — u faqat umumiy "til" (interfeys) beradi, haqiqiy ulanishni esa alohida drayver paketi (masalan PostgreSQL, MySQL yoki SQLite uchun) ta'minlaydi.

haqiqiy-loyihada.go
import (
	"database/sql"

	_ "github.com/lib/pq" // PostgreSQL drayveri — faqat ro'yxatdan o'tish uchun import qilinadi
)

func main() {
	db, err := sql.Open("postgres", "user=aziz dbname=shop sslmode=disable")
	// db — bu YAGONA ulanish emas, balki ULANISHLAR TO'PLAMI (connection pool)!
}

E'tibor bering: drayver paketi _ (bo'sh identifikator) bilan import qilinadi — biz uning funksiyalarini to'g'ridan-to'g'ri chaqirmaymiz, faqat uning init() funksiyasi ishga tushib, o'zini database/sqlga ro'yxatdan o'tkazishini xohlaymiz (sql.Register orqali — bu darsda keyinroq o'zimiz ham shunday qilamiz).

Yana bir muhim tushuncha: sql.Open qaytargan *sql.DB — bitta ulanish emas, balki ulanishlar to'plami (connection pool). Go bu to'plamni siz uchun avtomatik boshqaradi: kerak bo'lganda yangi ulanish ochadi, bo'sh turganlarni qayta ishlatadi. Shuning uchun sql.Open chaqirilganda hali haqiqiy tarmoq ulanishi ham sodir bo'lmagan bo'ladi — bu keyingi darsda ko'rasiz.

Bizning interaktiv muhitimizda internetga chiqib haqiqiy bazaga ulanib bo'lmaydi (tashqi drayverlarni ham yuklab bo'lmaydi), shuning uchun shu kurs davomida standart kutubxonaning o'zi bilan yozilgan, juda oddiy "o'quv drayveri"dan foydalanamiz. Muhim: siz yozadigan db.Exec, db.Query, rows.Scan kabi barcha chaqiruvlar — aynan haqiqiy PostgreSQL yoki MySQL bilan ishlaganda yozadigan chaqiruvlaringizning o'zi.

Key Takeaway

Key Takeaway:

database/sql — umumiy interfeys, haqiqiy ulanishni drayver ta'minlaydi. *sql.DB — bitta ulanish emas, ulanishlar to'plami (connection pool).

NEXT UP

Opening a Database Connection

What is database/sql?

database/sql nima?

database/sql — Go standart kutubxonasining ma'lumotlar bazasi bilan ishlash paketi. Muhim narsa: u o'zi hech qanday bazaga ulanmaydi — u faqat umumiy "til" (interfeys) beradi, haqiqiy ulanishni esa alohida drayver paketi (masalan PostgreSQL, MySQL yoki SQLite uchun) ta'minlaydi.

haqiqiy-loyihada.go
import (
	"database/sql"

	_ "github.com/lib/pq" // PostgreSQL drayveri — faqat ro'yxatdan o'tish uchun import qilinadi
)

func main() {
	db, err := sql.Open("postgres", "user=aziz dbname=shop sslmode=disable")
	// db — bu YAGONA ulanish emas, balki ULANISHLAR TO'PLAMI (connection pool)!
}

E'tibor bering: drayver paketi _ (bo'sh identifikator) bilan import qilinadi — biz uning funksiyalarini to'g'ridan-to'g'ri chaqirmaymiz, faqat uning init() funksiyasi ishga tushib, o'zini database/sqlga ro'yxatdan o'tkazishini xohlaymiz (sql.Register orqali — bu darsda keyinroq o'zimiz ham shunday qilamiz).

Yana bir muhim tushuncha: sql.Open qaytargan *sql.DB — bitta ulanish emas, balki ulanishlar to'plami (connection pool). Go bu to'plamni siz uchun avtomatik boshqaradi: kerak bo'lganda yangi ulanish ochadi, bo'sh turganlarni qayta ishlatadi. Shuning uchun sql.Open chaqirilganda hali haqiqiy tarmoq ulanishi ham sodir bo'lmagan bo'ladi — bu keyingi darsda ko'rasiz.

Bizning interaktiv muhitimizda internetga chiqib haqiqiy bazaga ulanib bo'lmaydi (tashqi drayverlarni ham yuklab bo'lmaydi), shuning uchun shu kurs davomida standart kutubxonaning o'zi bilan yozilgan, juda oddiy "o'quv drayveri"dan foydalanamiz. Muhim: siz yozadigan db.Exec, db.Query, rows.Scan kabi barcha chaqiruvlar — aynan haqiqiy PostgreSQL yoki MySQL bilan ishlaganda yozadigan chaqiruvlaringizning o'zi.

Key Takeaway

Key Takeaway:

database/sql — umumiy interfeys, haqiqiy ulanishni drayver ta'minlaydi. *sql.DB — bitta ulanish emas, ulanishlar to'plami (connection pool).

NEXT UP

Opening a Database Connection