導入
Go には他言語のような try/catch(例外)がありません。代わりに、関数が最後の戻り値として error を返し、呼び出し側がその場で確認します。「失敗するかもしれない処理は、失敗を値で返す」という考え方です。
説明
package main
import (
"errors"
"fmt"
)
// 0 で割ろうとしたらエラーを返す
func safeDivide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("0 では割れません")
}
return a / b, nil
}
func main() {
result, err := safeDivide(10, 0)
if err != nil {
fmt.Println("エラー:", err)
return
}
fmt.Println("結果:", result)
}
- 関数は
(int, error)のように「結果」と「エラー」を返します。 - 成功したときはエラー欄に
nil(ニル、=「何も無い」)を返します。 - 呼び出し側は必ず
if err != nil { ... }でエラーを確認するのがお約束です。
この if err != nil はGoのコードで最も頻繁に登場する定型句です。少し冗長に見えますが、「どこで失敗しうるか」がコードを読むだけで分かる、という利点があります。
やってみよう
safeDivide(10, 0) を safeDivide(10, 2) に変えると、err が nil になり「結果: 5」が表示されます。「エラーが nil かどうかを必ず確認する」流れを、成功・失敗の両方でたどってみましょう。