Go データベース インタラクションでは、トランザクション ロールバックに defer を使用すると疑問が生じることがあります。次の例を考えてみましょう:
tx, err := db.Begin() if err != nil { log.Fatal(err) } defer tx.Rollback() // Why defer?
この例は、Go でトランザクションのロールバックがどのように延期されるかを示しています。ロールバックを延期すると、後続の操作でエラーが発生した場合や、コードが手動ロールバックの前に突然戻った場合でも、常にロールバックが呼び出されます。
最初にコミットしてエラー時に手動でロールバックしないのはなぜですか?
なぜ最初にトランザクションをコミットし、エラーが発生した場合は手動でロールバックしないのかと不思議に思う人もいるかもしれません。このアプローチは、孤立レコードの作成やデータベース内での不整合を引き起こす可能性があるため、非効率的です。
ロールバックの延期とワークフローのコミット
ロールバックを延期すると、コード次の操作が失敗した場合にロールバックが確実に行われるようにします。ワークフローの展開は次のとおりです。
ロールバックを延期する利点
追加メモ
以上がGo でデータベースのロールバックを延期する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。