Maison  >  Article  >  développement back-end  >  Comment gérer les erreurs qui se produisent lors du report dans Golang ?

Comment gérer les erreurs qui se produisent lors du report dans Golang ?

WBOY
WBOYoriginal
2024-06-02 22:20:591124parcourir

Il existe deux façons de gérer les erreurs en différé dans Go : 1. Créez un type d'erreur personnalisé pour détecter les erreurs 2. Utilisez recovery() pour détecter les paniques ; Par exemple, l'utilisation de recovery() pour capturer les erreurs dans defer peut être écrite comme ceci : defer func() { if err := recovery();= nil { fmt.Println(err) } }.

如何在 Golang 中处理 defer 期间发生的错误?

Comment gérer les erreurs qui se produisent lors du report dans Golang ?

Dans Golang, l'instruction defer est utilisée pour garantir que les opérations dans la fonction sont exécutées immédiatement après le retour de la fonction, qu'une exception se produise ou non. Cependant, si des erreurs surviennent lors de l'exécution d'une fonction defer, ces erreurs sont généralement ignorées. defer 语句用于确保函数中的操作在函数返回后立即执行,无论是否发生异常。然而,如果在 defer 函数执行期间发生错误,则这些错误通常会被忽略。

要处理 defer 期间的错误,有两种主要方法:

自定义错误类型

一种方法是创建一个自定义错误类型来捕获 defer 函数的错误。例如:

import (
    "fmt"
)

type DeferError struct {
    err error
}

func (e DeferError) Error() string {
    return fmt.Sprintf("Defer error: %v", e.err)
}

使用 recover()

另一种方法是使用 recover() 来捕获 defer 函数中发生的恐慌。例如:

import "fmt"

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
    }()

    panic("defer error")
}

实战案例

考虑以下示例:

import (
    "fmt"
    "os"
)

func writeToFile(filename string) {
    defer os.Remove(filename) // 删除文件

    f, err := os.Create(filename)
    if err != nil {
        panic(fmt.Sprintf("Error creating file: %v", err))
    }

    // 执行 IO 操作 ...
}

在这个示例中,defer 函数用于确保在函数返回后删除文件。但是,如果文件创建失败 (os.Create 出错),defer 函数将无法执行,因为函数会提前返回。

要捕获这个错误,我们可以使用以下方法:

func writeToFile(filename string) {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
        os.Remove(filename) // 删除文件
    }()

    f, err := os.Create(filename)
    if err != nil {
        panic(fmt.Sprintf("Error creating file: %v", err))
    }

    // 执行 IO 操作 ...
}

现在,如果文件创建失败,defer

Pour gérer les erreurs lors du différer, il existe deux manières principales : 🎜

Type d'erreur personnalisé

🎜Une méthode consiste à créer un type d'erreur personnalisé pour détecter l'erreur lors du report Fonction . Par exemple : 🎜rrreee

Utilisez recover()

🎜Une autre méthode consiste à utiliser recover() pour capturer le différer fonction panique. Par exemple : 🎜rrreee

Exemple pratique

🎜Considérez l'exemple suivant : 🎜rrreee🎜Dans cet exemple, la fonction defer est utilisée pour garantir que le fichier est supprimé après le retour de la fonction. . Cependant, si la création du fichier échoue (erreur os.Create), la fonction defer ne s'exécutera pas car la fonction reviendra plus tôt. 🎜🎜Pour détecter cette erreur, nous pouvons utiliser la méthode suivante : 🎜rrreee🎜Maintenant, si la création du fichier échoue, la fonction defer sera toujours exécutée car elle ne lève pas d'exception. 🎜

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