Maison >développement back-end >Golang >Comment garantir la gestion des erreurs lors de la suppression d'entités dans GORM lorsque les lignes sont introuvables ?

Comment garantir la gestion des erreurs lors de la suppression d'entités dans GORM lorsque les lignes sont introuvables ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 18:02:29531parcourir

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

Gestion des erreurs lors de la suppression d'entités dans GORM

Lorsque vous travaillez avec une base de données, il est crucial de gérer les erreurs potentielles avec élégance. Dans GORM, la fonction Supprimer, destinée à supprimer une entité de la base de données, présente un problème spécifique où plusieurs appels avec le même identifiant ne déclenchent pas d'erreur.

Le comportement par défaut

Par par défaut, GORM ne considère pas la tentative de suppression d'une ligne inexistante dans la base de données comme une erreur. Par conséquent, la fonction Supprimer renvoie simplement nil dans de tels cas, même si elle ne parvient pas à supprimer l'entité.

Identifier la cause première

Ce comportement découle du fait que GORM suit la norme SQL, ce qui ne définit pas la suppression d'une ligne inexistante comme une erreur. Par conséquent, GORM ne génère pas automatiquement d'erreur lorsque vous essayez de supprimer une ligne inexistante.

Gestion personnalisée des erreurs

Si vous devez renvoyer une erreur lorsque vous tentez de supprimer une ligne ligne inexistante, vous devez vérifier manuellement le champ RowsAffected du résultat de la fonction Supprimer. Voici comment modifier votre code :

<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>

Dans ce code modifié :

  • Nous vérifions d'abord toute autre erreur ayant pu survenir lors de l'exécution de la fonction Supprimer.
  • Si db.Error est nul, on vérifie le champ RowsAffected. S'il est inférieur à 1, cela signifie qu'aucune ligne n'a été affectée, indiquant que la ligne avec l'identifiant donné n'existe pas.
  • Dans ce cas, nous renvoyons un message d'erreur personnalisé pour indiquer l'échec de l'opération.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn