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) } }.
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
différer
, il existe deux manières principales : 🎜 lors du report Fonction
. Par exemple : 🎜rrreeerecover()
recover()
pour capturer le différer
fonction panique. Par exemple : 🎜rrreeedefer
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!