database/sql paketi
- Go kursu
- İleri seviye
- Ders 25/68
- 4 dk
database/sql paketinin temelini öğrenirsin.
database/sql paketi
database/sql tüm SQL veritabanları için ortak bir arayüz sunar; asıl iletişimi bir sürücü yapar. Sürücü, yan etki için boş tanımlayıcıyla içe aktarılır ve kendini kaydeder:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)Kodun geri kalanı veritabanından bağımsızdır: MySQL'den PostgreSQL'e geçerken çoğunlukla yalnızca sürücü ve bağlantı dizesi değişir.
sql.DB bir havuzdur
*sql.DB tek bir bağlantı değil, bağlantı havuzudur. Uygulama başında bir kez oluşturulur ve tüm goroutine'ler tarafından paylaşılır; her istekte açıp kapatmak yanlıştır. Havuzu SetMaxOpenConns, SetMaxIdleConns ve SetConnMaxLifetime ile ayarlarsın.
Uygulama Kayıtlı sürücüler
sql.Drivers() kayıtlı sürücü adlarını döndürür. Hiç sürücü içe aktarmadan len(sql.Drivers()) değerini yazdır.
Başlangıç kodu
package main
import (
"database/sql"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"database/sql"
"fmt"
)
func main() {
fmt.Println(len(sql.Drivers()))
}Beklenen çıktı
0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sürücü paketi neden <code>_</code> ile içe aktarılır?
- Test için
- Yalnızca init ile kendini kaydetmesi için Doğru cevap
- Daha hızlı derlensin diye
- Gizli kalsın diye
Açıklama: Sürücünün init fonksiyonu sql.Register çağırır; paketin adını kodda kullanmadığın için boş tanımlayıcı gerekir.
2 Sürücüyü kaydet
import (
"database/sql"
____ "github.com/lib/pq"
)
import (
"database/sql"
_ "github.com/lib/pq"
)
Açıklama: Boş tanımlayıcı paketi yalnızca init etkisi için içe aktarır.
3 database/sql parçaları
| Kavram | Anlamı |
|---|---|
database/sql |
Ortak arayüz |
Sürücü |
Veritabanıyla konuşur |
*sql.DB |
Bağlantı havuzu |
SetMaxOpenConns |
Havuz sınırı |