3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Go言語 のpanic を正しくrecover する

Last updated at Posted at 2021-08-29

Go言語 のpanic とrecover について

panic について

Go言語には、例外処理のために一般に使われるerrors に加えて、panic という処理が存在する。
基本的には回復不能と判断された実行時エラーを発生させる機構。

recover について

panic を取得し、エラー処理を実装できる機構。これがないとプログラムはクラッシュしてしまう。

使用上の注意点

言語仕様なのでドキュメントを読めば書いてあるが、慣れた人ほど注意した方が良いこと

recover() は関数内部で実行されることで初めてpanicを受け取ってくれる

下記のコードを実行すると、panic が回収されず、そのままプログラムが終了する

package main

func main() {
	recover()
	panic("パニックが回収されませんでした")
}

一方で次のコードのように、関数内部で受け取ってやることでちゃんとpanicが回収されて、プログラムが正常に終了する

package main

import "fmt"

func main() {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("パニックが回収されました")
		}
	}()
	panic("パニックが回収されませんでした")
}

以上のように、panic は正しく受け取ってあげないとプログラムが全落ちしてしまうので気をつけて使おう。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?