0Pricing
Go Academy · Ders

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

  1. database/sql ve Sürücüler
  2. sqlx: Yapı Tarama ve Adlandırılmış Sorgular
  3. pgx: Yüksek Performanslı PostgreSQL Sürücüsü
  4. İşlemler ve Geçişler
← Go Academy Sayfasına Dön