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パニックプログラムのクラッシュの内容は、スクリプトハウスの過去の記事を検索するか、次の関連記事を閲覧を続けてください、あなたは将来的にもっとスクリプトハウスをサポートして願っています!...
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン