Go Academy · Ders

İşlemler ve Geçişler

BEGIN/COMMIT örüntüleri ve şema geçişleri

4. ders / 413 adım

İşlemler ve Geçişler, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. 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 içinde işlemler

İşlemleri db.BeginTx ile bir işlem içinde gruplayın. Sonunda Commit veya Rollback yapın; panikleri yönetmek için her zaman bir geri almayı defer edin.

tx, err := db.BeginTx(ctx, nil)
if err != nil { return err }
defer tx.Rollback() // no-op after Commit

_, err = tx.ExecContext(ctx, "UPDATE accounts SET balance=balance-100 WHERE id=$1", from)
if err != nil { return err }
_, err = tx.ExecContext(ctx, "UPDATE accounts SET balance=balance+100 WHERE id=$1", to)
if err != nil { return err }
return tx.Commit()

İşlem yalıtım düzeyleri

Yalıtım düzeyini denetlemek için sql.TxOptions aktarın:

tx, err := db.BeginTx(ctx, &sql.TxOptions{
    Isolation: sql.LevelSerializable,
    ReadOnly:  false,
})

Aynı Tx'i işlevler arasında kullanma

Tüm yardımcı işlevlerin aynı işleme katılması için *sql.Tx'i bu işlevlere aktarın. Bir işlem içinde db.ExecContext çağrısı yapmayın; tx.ExecContext kullanın.

Rollback erteleme deseni

BeginTx işleminden hemen sonra Rollback işlemini erteleyin. Commit başarılı olursa sonraki Rollback işlemi etkisiz olur. Commit başarısız olursa Rollback değişiklikleri geri alır.

tx, _ := db.BeginTx(ctx, nil)
defer tx.Rollback() // safe no-op after successful Commit

Kayıt noktaları

Kısmi geri almalar için bir işlem içinde kayıt noktaları kullanın (ham SQL aracılığıyla PostgreSQL'e özgüdür):

tx.ExecContext(ctx, "SAVEPOINT sp1")
// ... work ...
tx.ExecContext(ctx, "ROLLBACK TO SAVEPOINT sp1") // partial rollback

Veritabanı geçişlerine genel bakış

Geçişler, şemayı artımlı olarak geliştiren sürümlenmiş SQL betikleridir. Her geçişin bir uygulama ve bir geri alma yönü vardır.

golang-migrate

github.com/golang-migrate/migrate/v4, sürümlenmiş SQL dosyalarını sırayla çalıştırır ve uygulanan sürümü schema_migrations tablosunda izler.

m, _ := migrate.New("file://migrations", dsn)
m.Up() // apply all pending migrations

goose

github.com/pressly/goose/v3, SQL ve Go işlevi geçişlerini up/down komutlarıyla destekleyen bir başka popüler geçiş kitaplığıdır.

goose.Up(db, "migrations")

Şema yönetimi için Atlas

Atlas, bildirime dayalı şema yönetimi sağlar: İstenen şema durumunu tanımlarsınız; Atlas farkı hesaplar ve geçiş betiklerini otomatik olarak oluşturur.

Başlangıçta geçişleri çalıştırma

Dağıtım sırasında şemanın güncel olduğundan emin olmak için sunucuyu başlatmadan önce geçişleri main içinde programlı olarak çalıştırın.

if err := runMigrations(db); err != nil { log.Fatal(err) }

Geçişler için en iyi uygulamalar

Her geçiş tek bir konuya odaklanmalı ve ileriye dönük uyumlu (eklemeli) olmalıdır. Sütunları hiçbir zaman hemen silmeyin; kullanımdan kaldırılmış olarak işaretleyin ve kod artık bunlara başvurmadığında daha sonraki bir geçişte kaldırın.

Hızlı Kontrol

BeginTx işleminden hemen sonra tx.Rollback() işlemini neden her zaman ertelemelisiniz?

Özet: İşlemler ve Geçişler

Temel noktalar:

  • BeginTx → defer Rollback → çalışma → Commit
  • Yardımcı işlevlere *sql.Tx aktarın; db.ExecContext yerine tx.ExecContext kullanın
  • Sürümlenmiş SQL geçişleri için golang-migrate veya goose kullanın
  • Geçişleri başlangıçta çalıştırın; her geçişi eklemeli tutun
Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“İşlemler ve Geçişler” dersi ücretsiz mi?

Evet — “İşlemler ve Geçiş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.

“İşlemler ve Geçişler” dersinde ne öğreneceğim?

BEGIN/COMMIT örüntüleri ve şema geçişleri 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 4. dersidir.

“İşlemler ve Geçiş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