Maison >développement back-end >Golang >La panique golang peut-elle capturer l'erreur standard ?
(Apprentissage recommandé :
go) groupe Accès hors limites, référence de pointeur nul, etc. Ces erreurs d'exécution provoqueront des exceptions de panique.
Il n'y a pas d'instructions de capture d'exception telles que try...catch... dans Golang, mais les fonctions intégrées de panique et de récupération sont fournies pour lancer des exceptions et intercepter des exceptions. • Le type de paramètre de panique et de récupération est interface{}, donc tout type d'objet peut être lancé.
• Si une erreur fatale se produit dans le programme et que l'ensemble du programme ne peut pas continuer, golang fournit la fonction de panique pour quitter le programme.
• Lorsqu'un programme panique, utilisez recovery pour reprendre le contrôle du programme .
• Toutes les exceptions de panique ne proviennent pas de l'exécution, l'appel direct de la fonction de panique intégrée provoquera également des exceptions de panique.
• La fonction de panique accepte n'importe quelle valeur comme paramètre.
(1) Utilisation de la panique① Les erreurs causées lors du débogage retardé peuvent être capturées par le débogage retardé ultérieur, mais seule la dernière erreur peut être capturée.
func test() {defer func() { fmt.Println(recover()) }()defer func() { panic("defer panic") }() panic("test panic") }func main() { test() //defer panic}
②Lorsqu'une fonction panique, elle termine son exécution une fois que toutes les fonctions de retard sont exécutées, le contrôle du programme revient à l'appelant de la fonction. Ce processus se poursuivra jusqu'à ce que toutes les fonctions de la coroutine actuelle reviennent et se terminent, puis le programme imprimera les informations de panique, puis imprimera la trace de la pile, et enfin le programme se terminera.
Si la fonction ne panique pas, appeler la fonction de récupération n'obtiendra aucune information et n'affectera pas le processus en cours.
démopackage mainimport ( "fmt")func fullName(firstName *string, lastName *string) { if firstName == nil { panic("Firsr Name can't be null") } if lastName == nil { panic("Last Name can't be null") } fmt.Printf("%s %s\n", *firstName, *lastName) fmt.Println("returned normally from fullName") }func test(){ defer fmt.Println("deferred call in test") firName := "paul" fullName(&firName, nil) }func main() { defer fmt.Println("deferred call in main") test() fmt.Println("returned normally from main") }
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!