database/sql ve Sürücüler
DB kurulumu, QueryRow, Scan ve bağlantı havuzları
database/sql ve Sürücüler, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
database/sql genel bakışı
database/sql, Go'nun standart veritabanı soyutlama katmanıdır. Bir bağlantı havuzunu yönetir ve bir sürücü eklentisi aracılığıyla herhangi bir veritabanıyla çalışır.
Sürücü kaydetme
Sürücü paketini yalnızca yan etkileri için içe aktarın (sürücü kaydı). Ardından bir bağlantı açın:
import _ "github.com/lib/pq" // PostgreSQL driver
db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil { log.Fatal(err) }
defer db.Close()sql.Open ile db.Ping karşılaştırması
sql.Open bağlantı kurmaz; DSN'yi doğrular. Bağlantının etkin olduğunu doğrulamak için db.Ping() veya db.PingContext(ctx) çağrısını yapın.
if err := db.Ping(); err != nil { log.Fatal(err) }Satırları sorgulama
Bir SELECT çalıştırmak ve satırları taramak için db.QueryContext kullanın:
rows, err := db.QueryContext(ctx, "SELECT id, name FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()
for rows.Next() {
var id int; var name string
rows.Scan(&id, &name)
}Tek satır sorgusu
db.QueryRowContext, en fazla bir sonuç döndürmesi beklenen sorgular için bir *Row döndürür:
var name string
err := db.QueryRowContext(ctx, "SELECT name FROM users WHERE id = $1", id).Scan(&name)
if errors.Is(err, sql.ErrNoRows) { /* not found */ }Veri değişikliklerini yürütme
INSERT, UPDATE ve DELETE için db.ExecContext kullanın. Bu çağrı, etkilenen satırları ve son ekleme ID'sini içeren bir Result döndürür.
result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()Hazırlanmış ifadeler
Bir ifadeyi bir kez hazırlayın ve verimli bir şekilde birçok kez yürütün:
stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
row := stmt.QueryRowContext(ctx, email)
}Bağlantı havuzu ayarları
Havuzu üretim ortamı için yapılandırın:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)rows.Err() denetimi
Satır döngüsünden sonra her zaman rows.Err() denetimini yapın; döngü bir ağ hatası nedeniyle erkenden sona ermiş olabilir.
if err := rows.Err(); err != nil { return err }NULL değerleri
Veritabanındaki NULL değerlerini işlemek için sql.NullString, sql.NullInt64 ve benzerlerini kullanın. Aksi takdirde bu değerler, işaretçi olmayan bir Go türüne taranırken paniğe neden olabilir.
var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }Sürücü listesi
Yaygın sürücüler: github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL), modernc.org/sqlite (SQLite, yalnızca Go).
Hızlı Kontrol
Bir sorgudan sonra neden her zaman rows.Close() çağrısını yapmalı ve rows.Err() denetimini gerçekleştirmelisiniz?
Özet: database/sql
Temel noktalar:
- Yan etkiler için sürücüyü _ ile içe aktarın; sql.Open + Ping kullanın
- QueryContext → rows.Next + Scan + rows.Close + rows.Err
- Veri değişiklikleri için ExecContext; tek satırlar için QueryRowContext
- Havuz için SetMaxOpenConns, SetMaxIdleConns ve SetConnMaxLifetime
Sıkça Sorulan Sorular
“database/sql ve Sürücüler” dersi ücretsiz mi?
Evet — “database/sql ve Sürücüler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“database/sql ve Sürücüler” dersinde ne öğreneceğim?
DB kurulumu, QueryRow, Scan ve bağlantı havuzları Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“database/sql ve Sürücüler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- database/sql ve Sürücüler
- sqlx: Yapı Tarama ve Adlandırılmış Sorgular
- pgx: Yüksek Performanslı PostgreSQL Sürücüsü
- İşlemler ve Geçişler