1. ホーム
  2. スクリプト・コラム
  3. ゴラン

Goはパニックによるプログラムクラッシュの問題を解決するためにdefer+recoverを使用します

2022-02-15 17:59:23

事例紹介 : 並行スレッドを立ち上げたが、並行スレッドがパニックを起こした場合、並行スレッドをキャッチしないとプログラムがクラッシュしてしまうので、ゴルーチン内でrecoverを使ってパニックをキャッチしてメインスレッドに影響がないように処理します。

コードはこのようになります。

package main

import (
	"fmt"
	"time"
)

func sayHello() {
	for i := 0; i < 10; i++ {
		time.Sleep(time.Second)
		fmt.Println("hello world")
	}
}
func test() {
	// use defer + recover
	defer func() {
		//capture the panic thrown by test
		if err := recover();err!=nil{
			fmt.Println("error occurred in test",err)
		}
	}()
	// Define a map
	var myMap map[int]string
	myMap[0] = "golang" //error
}

func main() {

	go sayHello()
	go test()

	for i := 0; i < 10; i++ {
		fmt.Println("main() ok=",i)
		time.Sleep(time.Second)
	}
}

実装結果は以下のようになります。

この記事では、プログラムのクラッシュにつながるパニックの問題を解決するためにdefer+recoverを使用してGo言語について紹介されている、より関連するGoパニックプログラムのクラッシュの内容は、スクリプトハウスの過去の記事を検索するか、次の関連記事を閲覧を続けてください、あなたは将来的にもっとスクリプトハウスをサポートして願っています!...