Junior — Middle
Sistemde iç içe işlemler uygulanabilir mi ve hangi durumlarda bu kabul edilebilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'nun standart kütüphanesinde (database/sql paketi) iç içe işlemler doğrudan desteklenmemektedir, çünkü çoğu veritabanı yönetim sistemi (DBMS) tam anlamıyla iç içe işlemleri uygulamamaktadır. Bunun yerine, genellikle kaydetme noktaları (savepoints) kullanılır; bu, işlemin belirli bir noktasına geri dönmeyi sağlar.
Olası seçenekler:
- DBMS bunları destekliyorsa savepoints kullanmak (örneğin, PostgreSQL, MySQL). Go'da, SQL komutları
SAVEPOINT,ROLLBACK TO SAVEPOINTçalıştırılarak yapılabilir. - İç içe işlemleri taklit etmek için ayrı işlemler kullanmak, ancak bu her zaman iş mantığı açısından doğru olmayabilir.
Ne zaman izin verilir:
- Büyük bir işlem içinde kısmi değişiklikleri geri almak istiyorsanız, tüm işlemi geri almadan.
- Birden fazla aşaması olan karmaşık işlemlerde, her aşama ayrı ayrı geri alınabilir.
Go'da savepoints kullanımı örneği:
trx, err := db.Begin()
if err != nil {
// hata işleme
}
_, err = trx.Exec("SAVEPOINT sp1")
if err != nil {
trx.Rollback()
return err
}
// İşlemleri gerçekleştir
// Hata durumunda:
_, err = trx.Exec("ROLLBACK TO SAVEPOINT sp1")
// Devam et veya tam commit yap
err = trx.Commit()
Bu şekilde, iç içe işlemler savepoints aracılığıyla gerçekleştirilir, iç içe Begin/Commit çağrılarıyla değil.