ホームページ >バックエンド開発 >Golang >golang リカバリ後の復帰方法

golang リカバリ後の復帰方法

(*-*)浩
(*-*)浩オリジナル
2019-12-17 10:43:174541ブラウズ

golang リカバリ後の復帰方法

recover

try catch メカニズムはありませんが、実際には Go にも同様の回復メカニズムがあります。使い方は非常に簡単です。簡単: (推奨学習: 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
}

まず第一に、誰もが defer の役割を理解する必要があります。簡単に言うと、defer は次のようなものです。オブジェクト指向におけるデストラクタ この関数ではパニックで終了した場合でも終了時に実行されます。

つまり、cal 関数は終了するたびに例外が発生したかどうかをチェックし、例外が発生した場合にはログを記録するなどの処理を行うことで、プログラムの実行を継続できます。

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
}

主なアイデア: defer を使用して、return の前に戻り変数 (i と err として事前に決定されている) の値を変更します

以上がgolang リカバリ後の復帰方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。