2019年6月27日木曜日

Golangのtry-catch的なやり方

以下のphpのtry-catchの書き方、ウェブエンジニアなら、恐らく何度でも目にしたことがあると思います。
<?php
function hoge() {
    try {
        throw new Exception("throw error\n");
    }catch(Exception $e) {
        echo $e->getMessage();
        echo "will do something to rollback";
    }
}
hoge();
?>
Golangなら、相等な書き方はないでしょうか?
答えは、あります。サンプルは下記の通りです。
package main
import (
    "fmt"
)
func hoge() {
    defer func() {
            if err := recover(); err != nil {
                    fmt.Println("catch the error.", err)
                    fmt.Println("will do something to rollback")
            }
        }()
        panic("throw exception")   
}
func main() {
    hoge()
}
簡単に説明します。
異常が発生しそうなソースコードの前に、「recover」を使って、異常を捕捉(catch)することができます。
特にDBの何かエラーが発生しそうで、rollbackをしないといけないときに、とておも役に立つと思います。
使い方は以下のように↓
func 関数名() {
    defer func() {
        if err := recover(); err != nil {
            // rollbackはここに書く
        }
    }
    // db実行などエラーが発生しそうなコードはここに書く
}

0 件のコメント:

コメントを投稿