この記事は、and factory.inc Advent Calendar 2022の 14日目 の記事です。
昨日は@doiheiの【Swift】Encodableで可変パラメータを追加してみる でした。
はじめに
Go言語は例外が存在しないため、エラーハンドリングを毎回する必要があります。メソッドを呼び出すたびにエラー判定をする必要があります。極端な例だと下記の状況も有り得ます。
func process() (int, error) {
aaa, err := funcAAA()
if err != nil {
return 0, err
}
bbb, err := funcBBB()
if err != nil {
return 0, err
}
...
zzz, err := funcZZZ()
if err != nil {
return 0, err
}
...
}
メソッドを呼び出してエラーハンドリング、メソッドを呼び出してエラーハンドリング...
とにかくエラーハンドリングの文を書く機会が多いです。これを毎回手で書くのは辛いので楽をしたいという話です。
解決方法
今回はコードスニペットで自動入力するように設定して解決したいと思います。私はIntelliJ IDEAのGo機能を利用して開発しているので、IDEAのライブテンプレート(他エディタで言うコードスニペット)を作成して解決します。ライブテンプレートの詳細については公式ドキュメントを参照してください。動作確認はしていませんが、おそらくGoLandでも動作するかと思います。
差し当たり以下のライブテンプレートを作成しました。
if $err$ != nil {
return $errret$
}
これでも変数部分である$err$
と$errret$
の部分を手入力だけでエラーハンドリングのコードが書けるのでマシですが、できればすべて自動で入力してほしい…
IDEAのライブテンプレート機能は、変数に関数を適用することができます。行数を返したり、コード補完を呼び出したり、引数で与えた文字列をキャメルケースに変換したり…色々な変数が用意されています。詳細は公式ドキュメントを参照してください。
今回はdefaultReturnValues
、errorVariable
を使用します。各変数について以下のように式を設定します。
名前 | 式 |
---|---|
err | errorVariable() |
errret | defaultReturnValues(errorVariable) |
これでライブテンプレートを呼び出せば、一発でエラーハンドリングのコードを書いてくれます。
例えば、以下のような状況の場合
func Sample() (int, error) {
a, err := AAA()
[ここでライブテンプレートを呼び出す]
}
こうなります
func Sample() (int, error) {
a, err := AAA()
if err != nil {
return 0, err
}
}
これでエラーハンドリングのコードを書く必要がなくなりました
終わりに
とにかくエラーハンドリングの文を書きたくなかったのでライブテンプレート呼び出しだけで実現できて助かりました。今回使用した他にも関数が用意されているので覗いてみようと思います。
明日のAdvent Calendarの記事もお楽しみに!