İşlemler ve Geçişler
BEGIN/COMMIT örüntüleri ve şema geçişleri
İş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 CommitKayı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 rollbackVeritabanı 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 migrationsgoose
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
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
- 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