お元気そうで残念です

仕事とか趣味のメモを残します

Go言語でdeferを使った際のerror処理

Go言語のdefer文,便利ですよね.
でもdefer文を使うと返り値が無視されてしまうので,error処理をどうするべきか悩みます.

Goでdeferの処理中のエラーを返す書き方を工夫してみた
こちらのサイトでもいくつか検証して紹介されています.

対象の処理にもよりますが,個人的にはdefer文を使う時のerrorはキャッチせずにログに吐き出す程度で済まして良いんじゃないかと考えています.
例えば無名関数を使って以下のような感じです.

defer func() {
    err := resp.Body.Close()
    if err != nil {
        log.Println("can't close body!!", err)
    }
}()

close処理系は,すぐには大きな影響がないerrorが多い印象なのでpanicにしたり, mainまで拾い上げる必要は無いんじゃないかなと考えています.ものにもよると思いますが.