Golang でのエラー処理方法と関連する実践方法

PHPz
リリース: 2023-04-11 10:05:04
オリジナル
570 人が閲覧しました

Golang では、ほぼすべての言語に見られる例外システムが完全に削除され、より簡潔で柔軟なエラー処理方法に置き換えられました。この記事は、Golang でのエラー処理方法と関連する実践方法を紹介することを目的としています。

  1. エラー タイプ

Golang では、エラー タイプはエラー処理の基本単位です。エラー タイプは組み込みインターフェイス タイプで、次のように定義されます。

type error interface {
    Error() string
}
ログイン後にコピー

このインターフェイスには Error() メソッドが 1 つだけ含まれており、戻りタイプは文字列です。したがって、このインターフェイスを実装する任意の型をエラー型として使用できます。

Golang 標準ライブラリには、簡単なエラーをすばやく作成するために使用できる errors パッケージが含まれています:

import "errors"

func main() {
    err := errors.New("some error occurred")
    fmt.Println(err)
}
ログイン後にコピー

もちろん、エラー タイプをカスタマイズすることもできます:

type MyError struct {
    message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("MyError: %v", e.message)
}
ログイン後にコピー
  1. エラー処理の実践

Golang では、従来のエラー処理には、エラーを返す方法とパニックを返す方法の 2 つがあります。したがって、エラーが発生した場合、通常は次の 2 つの方法で処理します。

2.1 エラーを返す

通常、エラーを呼び出し元の関数の戻り値として使用します。扱うこと。例:

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(6, 2)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(result)
}
ログイン後にコピー

この関数は、2 番目の戻り値としてエラーを返します。この関数を呼び出す場合、通常はまずエラーが空かどうかを判断し、空でない場合は対応するエラー処理を実行します。

2.2 Panic

プログラムに回復不能なエラーが発生した場合、panic キーワードを使用してプログラム例外をスローできる場合があります。この時点で、プログラムは実行を停止し、対応するエラー メッセージを出力します。

func checkName(name string) {
    if name == "" {
        panic("name can not be empty")
    }
}

func main() {
    name := ""
    checkName(name)
    // other actions
}
ログイン後にコピー

上記のコードで、name が空の場合、プログラムは例外をスローして実行を停止します。

  1. エラー処理のベスト プラクティス

コードの読みやすさと保守性を確保するには、いくつかのエラー処理のベスト プラクティスに従う必要があります。

3.1 Panic の悪用を避ける

Golang では、Panic は回復不可能なエラーを処理するためにのみ使用されます。したがって、コードを記述するときは、panic を自分でスローするか、panic をキャッチするかにかかわらず、慎重に扱う必要があります。 パニックの使用は、制御不能な異常な状況に限定するようにしてください。

3.2 戻りエラー コード

場合によっては、エラー コードを返すことでエラーを表すことができます。たとえば、HTTP リクエストのエラー コードは、404 Not Found500 Internal Server Error などです。エラー コードを返すとエラー情報を効果的に伝えることができますが、エラー コードの設計にも注意を払う必要があります。エラー コードには、固有、識別可能、読み取り可能などの属性が必要です。

3.3 エラーの説明を返す

関数でエラーが発生した場合、詳細なエラーの説明を返すと、ユーザーはエラーの場所と原因をすぐに特定するのに役立ちます。エラーの種類をカスタマイズして、より具体的なエラーの説明を実現することもできます。

type MyError struct {
    message  string
    location string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("Error occurred in %s: %s", e.location, e.message)
}
ログイン後にコピー
  1. 結論

Golang では例外が完全に削除され、エラー処理がより柔軟かつ簡潔に実行されます。エラー情報を正しく処理して配信することで、プログラムの安定性と保守性を確保できます。上記のエラー処理のベスト プラクティスに従うと、より堅牢で信頼性が高く、読みやすいコードを作成するのに役立ちます。

以上がGolang でのエラー処理方法と関連する実践方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート