2016年7月1日のブックマーク (1件)

  • Golangで別のgoroutineで起こったpanicではdeferが実行されない - 自己言及器官

    Go言語ではdefer文を使うことにより、関数が終了する際に必ず実行されるような処理を書くことができます。 これにより内部でpanicが起こったりした、通常とは違う処理をした場合でも、ファイルリソースなどの解放を確実に行うことができます、しかしいつも必ずというわけではないようです。たとえば別のgoroutineで起こったpanicにより実行が中断された場合、deferは実行されないようです、以下のようなコードで挙動の違いを確認できます。 問題が無いパターン(deferが実行され、panicがrecoverで補足できるパターン) package main import ( "fmt" "time" ) func main() { defer func() { fmt.Println("defer!") if err := recover(); err != nil { fmt.Println

    Golangで別のgoroutineで起こったpanicではdeferが実行されない - 自己言及器官
    codehex
    codehex 2016/07/01
    これに悩んでいた!