Golangのエラー処理の仕組みを詳しく解説した記事

PHPz
リリース: 2023-03-30 09:47:37
オリジナル
677 人が閲覧しました

Golang は人気が高まっているプログラミング言語です。その特徴はシンプルで習得が容易であり、高い同時実行性をサポートしているため、Web 開発やクラウド コンピューティングなどの分野で非常に人気があります。ただし、エラー処理は複雑なプログラムを作成する上で不可欠な部分です。 Golang のエラー処理方法は、他のプログラミング言語と比べて少し異なります。この記事では、Golang のエラー処理メカニズムを紹介し、いくつかの実践的な処理テクニックを提供します。

1. エラー処理メカニズム

Golang では、error は組み込み型であり、単純な実装 (通常は戻り値) を持ちます。したがって、関数呼び出しが失敗すると、例外をスローする代わりにエラーが返されます。

以下は、エラーを返す基本的なコード例です。

func divide(a int, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a/b, nil
}
ログイン後にコピー

上記のコードでは、b の値が 0 の場合、関数はエラーを含む新しい作成されたコードを返します。 New() 関数エラーが発生し、呼び出し側で戻り値を確認してください。

エラーを返す関数を呼び出すときは、関数によって返されるエラー値を確認する必要があります。そうでないと、プログラムが終了します。

2. エラー処理の実践

エラーを処理する方法は、高品質のソフトウェアを作成する上で重要な部分です。エラー処理を適用する方法は次のとおりです。

  1. 透過的エラー
    透過的エラーとは、最終結果に表示されるように、Golang アプリケーションのコール スタックにエラーを渡すことを指します。このアプローチにより、呼び出し元はエラーを検査して処理できるため、エラーの根本原因を知ることができます。
func DoSomething() error {
    // 调用第三方API,返回一个错误
    resp, err := http.Get("https://google.com")
    if err != nil {
        return fmt.Errorf("failed to get response: %w", err) // 透传错误
    }
    // 处理响应
    // …
}
ログイン後にコピー

上記のコードでは、関数 DoSomething() は http.Get() メソッドを呼び出して応答を取得し、メソッドによって返されたエラーを上位関数に「透過的に送信」します。これは、DoSomething() 関数がエラーを処理せず、http.Get() によって生成されたエラー値を間接的に返すことを意味します。そうすることで、エラーの根本原因を追跡するのに役立ちます。

  1. カスタマイズされたエラー
    Golang では、エラーの種類をカスタマイズできるため、プログラマは特定の種類のエラーを簡単に定義して見つけることができます。
type MyError struct {
    ErrCode string
    Message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("[%s] %s", e.ErrCode, e.Message)
}

func DoSomething() error {
    err := &MyError{
        ErrCode: "1000",
        Message: "something went wrong",
    }
    return err
}
ログイン後にコピー

上記のコードでは、Error() メソッドを実装する新しい MyError タイプをカスタマイズしました。特定のエラー コードとエラー メッセージを設定することで、エラーの原因を正確に説明できます。

  1. パッケージ レベルのエラー処理
    Golang では、すべての関数呼び出しのエラーを正常に処理するために、パッケージ レベルでエラー処理メソッドを設定できます。これは、init() 関数とグローバル変数を使用して実現できます。
var Log *log.Logger

func init() {
    Log = log.New(os.Stdout, "MyApp: ", log.Ldate|log.Ltime|log.Lshortfile)
}

func DoSomething() error {
    // 处理错误
    if err := DoMoreWork(); err != nil {
        Log.Println(fmt.Errorf("failed to do more work: %w", err))
        return err
    }
    return nil
}
ログイン後にコピー

上記のコードでは、ログ パッケージのグローバル変数 Log を使用してログ メッセージを記録します。エラーを処理するときは、ファイルにログを記録し、エラーを返します。このアプローチにより、関数呼び出し間のログ記録のような反復的な動作が排除されます。

つまり、Golang アプリケーション開発においてエラー処理は重要な作業であり、プログラマーにとって、エラー処理が適切に行われないと、プログラムが適切に動作しない可能性があります。したがって、Golang プログラマーは、コードが常に正確で効率的であることを保証するために、パススルー エラー、カスタム エラー、パッケージ レベルのエラー処理などのエラー処理方法を理解し、採用する必要があります。

以上がGolangのエラー処理の仕組みを詳しく解説した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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