0Pricing
Go Academy · Ders

İşlemler

Kaydedin ve geri alın

İşlemler, 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.

İşlemler Neden Kullanılır

İşlem, birkaç ifadeyi hepsinin birlikte başarılı veya başarısız olacağı şekilde gruplar. Örneğin iki hesap arasında para aktarırken paranın aktarımın ortasında kaybolmamasını sağlayarak verileri tutarlı tutar.

  • Atomik: ya hep ya hiç
  • Tutarlı durum
  • Diğer işlemlerden yalıtılmış

db.Begin

Begin bir işlem başlatır ve bir *sql.Tx döndürür. İfadeleri havuz üzerinde değil, Tx üzerinde çalıştırırsınız; böylece hepsi aynı bağlantıyı ve aynı işlemi paylaşır.

tx, err := db.Begin()
if err != nil {
    log.Fatal(err)
}

Tx Üzerindeki İfadeler

tx.Exec ve tx.Query çağrılarını db üzerindeymiş gibi yapın; ancak siz Commit veya Rollback gerçekleştirene kadar her şey işlemin içinde çalışır.

_, err = tx.Exec("UPDATE accounts SET balance = balance - $1 WHERE id = $2", 100, 1)

Commit

tx.Commit() yapılan tüm değişiklikleri kalıcı hale getirir ve başkalarının görebilmesini sağlar. Bir hata döndürürse işlem uygulanmamıştır.

if err := tx.Commit(); err != nil {
    log.Fatal(err)
}

Rollback

Herhangi bir adım başarısız olursa, Begin'den bu yana yapılan tüm değişiklikleri silmek için tx.Rollback() çağrısını yapın. Veritabanı, hiçbir şey olmamış gibi önceki durumuna döner.

if err != nil {
    tx.Rollback()
    return err
}

defer Rollback Kalıbı

Sağlam bir kullanım biçimi, Begin işleminden hemen sonra Rollback çağrısını erteler. Başarılı bir Commit işleminden sonra yapılan Rollback zararsız bir etkisiz işlem olduğundan, bu yaklaşım her hata yolunda temizliği garanti eder.

tx, err := db.Begin()
if err != nil { return err }
defer tx.Rollback()
// ... do work ...
return tx.Commit()

Atomik Aktarım Örneği

İki güncelleme tek bir mantıksal işlem oluşturur: bir hesaptan çıkarma, diğerine ekleme. İkisi birlikte Commit edilmeli veya hiçbiri uygulanmamalıdır.

Çalıştırılabilir İşlem Benzetimi

Gerçek işlemler bir veritabanı gerektirir. Bu çalıştırılabilir örnek, bellek içi bir eşlemeyle başlatma, iki güncelleme ve Commit veya Rollback işlemlerini benzetir.

package main

import (
    "errors"
    "fmt"
)

func transfer(bal map[string]int, from, to string, amt int) error {
    if bal[from] < amt {
        return errors.New("insufficient funds")
    }
    snapshot := map[string]int{from: bal[from], to: bal[to]}
    bal[from] -= amt
    bal[to] += amt
    if bal[from] < 0 {
        bal[from], bal[to] = snapshot[from], snapshot[to]
        return errors.New("rolled back")
    }
    return nil
}

func main() {
    bal := map[string]int{"alice": 100, "bob": 20}
    if err := transfer(bal, "alice", "bob", 30); err != nil {
        fmt.Println("error:", err)
    } else {
        fmt.Println("committed:", bal)
    }
}

Yalıtım Düzeyleri

db.BeginTx, sql.LevelSerializable gibi bir yalıtım düzeyi de dahil olmak üzere seçenekleri kabul eder. Daha yüksek yalıtım daha fazla tutarsızlığı önler, ancak eşzamanlılığı azaltabilir.

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

İşlemleri Kısa Tutun

Bir işlem bir bağlantıyı tutar ve kilitleri elinde bulundurabilir. Tüm SQL işlemlerini hızlıca yapın, işlem içinde ağ çağrılarından veya kullanıcı girdisinden kaçının ve çekişmeyi azaltmak için işlemi gecikmeden Commit edin.

db ile tx'i Asla Karıştırmayın

Bir işlemin içinde ifadeleri yalnızca tx üzerinde çalıştırın. Burada db.Exec çağırmak, işlem dışında farklı bir bağlantı kullanır; bu nedenle bu değişiklikler işlemin parçası olmaz ve geri alınmaz.

Hızlı Kontrol

İşlemler hakkındaki bilginizi sınayın.

Özet

İşlemleri öğrendiniz:

  • Begin bir *sql.Tx döndürür; ifadeleri bunun üzerinde çalıştırın
  • Commit değişiklikleri kalıcı hale getirir; Rollback tüm değişiklikleri siler
  • defer tx.Rollback() hata durumunda temizliği garanti eder
  • BeginTx yalıtımı ayarlar; işlemleri kısa tutun
  • Tek bir işlem içinde db ile tx'i asla karıştırmayın

Sıkça Sorulan Sorular

“İşlemler” dersi ücretsiz mi?

Evet — “İşlemler” 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” dersinde ne öğreneceğim?

Kaydedin ve geri alın 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” 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. Bağlantı Açma
  2. Satırları Sorgulama
  3. Hazırlanmış İfadeler
  4. İşlemler
← Go Academy Sayfasına Dön