エラー処理

効果的なエラー処理は、堅牢なアプリケーション開発における重要な部分であり、特に GORM を使用してデータベースとインターフェースする場合に顕著になります。チェーン可能な API の影響を受ける GORM のエラー処理に対するアプローチでは、微妙な理解が必要です。

基本的なエラー処理

GORM はエラー処理をチェーン可能なメソッド構文に組み込んでいます。*gorm.DB インスタンスには、エラーが発生した場合に設定される Error フィールドが含まれています。一般的なプラクティスは、データベース操作の実行後、特に フィニッシャーメソッド の後にこのフィールドを確認することです。

メソッドチェーンの後で、Error フィールドを確認することが重要です

if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil {
// Handle error...
}

または

if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil {
// Handle error...
}

ErrRecordNotFound

GORM は、FirstLastTake などのメソッドを使用してレコードが見つからない場合は ErrRecordNotFound を返します。

err := db.First(&user, 100).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
// Handle record not found error...
}

エラーコードの処理

多くのデータベースは特定のコードでエラーを返し、制約違反、接続の問題、構文エラーなどのさまざまな問題を示す場合があります。GORM でこれらのエラーコードを処理するには、データベースによって返されるエラーを解析して関連するコードを抽出する必要があります

  • 例: MySQL エラーコードの処理
import (
"github.com/go-sql-driver/mysql"
"gorm.io/gorm"
)

// ...

result := db.Create(&newRecord)
if result.Error != nil {
if mysqlErr, ok := result.Error.(*mysql.MySQLError); ok {
switch mysqlErr.Number {
case 1062: // MySQL code for duplicate entry
// Handle duplicate entry
// Add cases for other specific error codes
default:
// Handle other errors
}
} else {
// Handle non-MySQL errors or unknown errors
}
}

Dialect Translated Errors

GORM は、TranslateError が有効な場合、使用されているデータベースの方言に関連する特定のエラーを返すことができます、GORM はデータベース固有のエラーを独自の一般化されたエラーに変換します。

db, err := gorm.Open(postgres.Open(postgresDSN), &gorm.Config{TranslateError: true})
  • ErrDuplicatedKey

このエラーは、挿入操作で一意キーの制約に違反した場合に発生します

result := db.Create(&newRecord)
if errors.Is(result.Error, gorm.ErrDuplicatedKey) {
// Handle duplicated key error...
}
  • ErrForeignKeyViolated

このエラーは、外部キー制約に違反した場合に発生します

result := db.Create(&newRecord)
if errors.Is(result.Error, gorm.ErrForeignKeyViolated) {
// Handle foreign key violation error...
}

TranslateError を有効にすることで、GORM は異なるデータベース間でエラーを処理するためのより統一された方法を提供し、データベース固有のエラーを一般的な GORM エラータイプに変換します。

Errors

GORM が返すことができるエラーの完全なリストについては、GORM のドキュメントの エラーリスト を参照してください。

プラチナスポンサー

ゴールドスポンサー

プラチナスポンサー

ゴールドスポンサー