Maison > développement back-end > Golang > le corps du texte

Comment revenir après la récupération de Golang

(*-*)浩
Libérer: 2019-12-17 10:43:17
original
4531 Les gens l'ont consulté

Comment revenir après la récupération de Golang

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
}
Copier après la connexion

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&#39;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
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal