0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Go 言語を学ぶAdvent Calendar 2023

Day 16

【Go言語】エラーを扱う

Posted at

Go言語のエラー処理の特徴と、一般的なエラーハンドリングの方法について説明する

エラーは値

Goのエラーはerror型のインターフェースを満たした単なる値として扱われる。
error型はint型などと同様にGoのランタイムに組み込まれている型で、インターフェースとして定義されている。
nil値でエラーがないことを表す。

type error interface {
    Error() string
}

errors.New()関数を使ってエラーを作成することが一般的。

func New(text string) error {
    return &errorString{text}
}

type errorString struct {
    s string
}

func (e *errorString) Error() string {
    return e.s
}

panic()は使わない

Goにはpanic()関数が存在し、プログラムを強制的に終了させることができるが、通常はエラー値での処理が推奨されている。

エラーハンドリング

Goの一般的なエラーハンドリングは、関数から返される末尾の戻り値としてerror型を定義する。

func ReadFile(name string) ([]byte, error) {
    // ...
}

エラーが発生したかどうかは、戻り値のerror型がnilかどうかで判断する。

ガード節を使用して、早期にエラーを処理し、ネストを浅く保つことが一般的。

f, err := os.Open("important.txt")
if err != nil {
    // エラーハンドリング
}
// ...

他言語との違い

  • Goのエラーハンドリングは他言語の例外処理と異なり、戻り値を確認してハンドリングするスタイル
    Javaなどでは例外機構があり、try、catch、finallyを使用するが、Goではerror値でエラーを表現し、呼び出し側で処理

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?