récupérer
Bien qu'il n'y ait pas de mécanisme de capture d'essai, Go a en fait un mécanisme de récupération similaire. La fonction est un peu plus faible. et l'utilisation est très simple. (Apprentissage recommandé : GO )
package main import "fmt" func main() { fmt.Printf("%d\n", cal(1, 2)) fmt.Printf("%d\n", cal(5, 2)) fmt.Printf("%d\n", cal(5, 0)) fmt.Printf("%d\n", cal(9, 2)) } func cal(a, b int) int { defer func() { if err := recover(); err != nil { fmt.Printf("%s\n", err) } }() return a / b }
Tout d'abord, chacun doit comprendre le rôle du Defer. est similaire au destructeur de l'objet orienté objet. Dans cette fonction, dans cette fonction Il sera exécuté à la fin, même s'il se termine par panique.
Ainsi, chaque fois que la fonction cal se termine, elle vérifiera s'il y a une exception. Si cela se produit, nous pouvons la gérer, comme l'enregistrement des journaux, afin que le programme puisse continuer à s'exécuter.
package main import ( "errors" "fmt" "math" ) func main() { _, err := IntFromInt64(math.MaxInt32 + 1) if err != nil { fmt.Println(err) } } func ConvertInt64ToInt(i64 int64) int { if math.MinInt32 <= i64 && i64 <= math.MaxInt32 { return int(i64) } panic("can't convert int64 to int") } func IntFromInt64(i64 int64) (i int, err error) {//这里 defer func() { if err2 := recover(); err2 != nil { i = 0//这里 err = errors.New("ttt")//这里 } }() i = ConvertInt64ToInt(i64) return i, nil }
Idée principale : Utilisez defer pour modifier la valeur de la variable de retour (déterminée à l'avance comme i et err) avant return
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!