読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

deferでリソースの閉じ忘れを防止する

前回の事例でもちょっと触れたdeferについて。
これは例外の地獄ネストを回避するための素敵な機能です。

実際のところ

一時ファイルを使う場合の事例は以下の通り。

import (
	"io/ioutil"
)

func Something () {
	file, _ := ioutil.TempFile(os.TempDir(), "")

	defer os.Remove(file.Name())
	defer file.Close()

        //something to do
}

なにが良いかというと……
リソースを作った直後に開放処理を記述できるので見通しがよくなります。

deferはキューされて処理されます。
今回の場合、ファイルポインタを閉じてから、ファイルの実体を消すようにしています。
こうしないとWindows系では意図せずクラッシュする事もあるそうなので注意してください。

参考もと

golang.jp
github.com