ホームページ > バックエンド開発 > Golang > 行が見つからない場合に GORM でエンティティを削除するときにエラー処理を確実に行うにはどうすればよいですか?

行が見つからない場合に GORM でエンティティを削除するときにエラー処理を確実に行うにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-26 18:02:29
オリジナル
540 人が閲覧しました

How to Ensure Error Handling During Entity Deletion in GORM when Rows are Not Found?

GORM でのエンティティ削除中のエラー処理

データベースを操作する場合、潜在的なエラーを適切に処理することが重要です。 GORM では、データベースからエンティティを削除することを目的とした Delete 関数で、同じ識別子を使用した複数の呼び出しでエラーが発生しないという特定の問題が発生します。

デフォルトの動作

デフォルトでは、GORM はデータベースに存在しない行を削除しようとしてもエラーとはみなしません。したがって、このような場合、エンティティの削除に失敗した場合でも、Delete 関数は単純に nil を返します。

根本原因の特定

この動作は、GORM が SQL 標準に従っているという事実から生じます。これは、存在しない行の削除をエラーとして定義するものではありません。その結果、存在しない行を削除しようとしても、GORM は本質的にエラーをスローしません。

カスタム エラー処理

行を削除しようとしたときにエラーを返す必要がある場合は、存在しない行がある場合は、削除関数の結果の RowsAffected フィールドを手動で確認する必要があります。コードを変更する方法は次のとおりです:

<code class="go">func DeleteCategory(id uint) error {
    c := Category{ID: id}

    db := db.Delete(&c)
    if db.Error != nil {
        return db.Error
    } else if db.RowsAffected < 1 {
        return fmt.Errorf("row with id=%d cannot be deleted because it doesn't exist", id)
    }

    return nil
}</code>
ログイン後にコピー

この変更されたコードでは:

  • まず、削除関数の実行中に発生した可能性のある他のエラーがないか確認します。
  • db.Error が nil の場合、RowsAffected フィールドをチェックします。 1 未満の場合は、行が影響を受けなかったことを意味し、指定された ID を持つ行が存在しないことを示します。
  • その場合、操作の失敗を示すカスタム エラー メッセージを返します。

以上が行が見つからない場合に GORM でエンティティを削除するときにエラー処理を確実に行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート