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

