2021-09-10 golang で err がネストしたとき
疲れている。
golang で err がネストしてしまったときや defer
が使えないときの後処理をどうしようってなる。
func openTwoConnections() (*Con1, *Con2, error) {
conn1, err := open1();
if err != nil {
return nil, nil, err
}
conn2, err := open2();
if err != nil {
// このへん
if err2 := close1(conn1); err2 != nil {
return nil, nil, err // err を返す or err2 を返す or 合わせた何かを返す
}
return nil, nil, err
}
return conn1, conn2, err
}
その関数の中で閉じて良いなら defer conn1.Close()
みたいにしてしまうと良いんだろうけど……。
コールバックをとって defer
するみたいな手もあるけど適用しづらい場面もあって……。
今日のコミット。
- rust-sandbox 1 commit
- rust-atcoder 1 commit