Golang ライブラリとフレームワークのエラー処理パターン

王林
リリース: 2023-08-07 09:01:47
オリジナル
623 人が閲覧しました

Golang ライブラリおよびフレームワークのエラー処理パターン

はじめに:
プログラミング プロセスにおいて、エラー処理は重要なタスクです。適切なエラー処理により、コードの可読性、保守性、信頼性が向上します。 Golang は、簡潔で効率的かつ同時実行可能なプログラミング言語として、いくつかのエレガントなエラー処理モードも提供します。この記事では、いくつかの一般的なエラー処理パターンを調査し、コード例で説明します。

1. エラーの種類
Golang では、エラーは組み込みのエラー タイプで表されます。 Error は、エラーの詳細を説明する文字列を返す Error() メソッドを 1 つだけ持つインターフェイス タイプです。例:

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

エラー パッケージを使用して単純なエラーを作成できます:

import "errors"

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

エラー パッケージを使用することに加えて、fmt パッケージの Errorf 関数を使用して、フォーマットされた文字列エラー:

import "fmt"

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("division by zero: %f / %f", a, b)
    }
    return a / b, nil
}
ログイン後にコピー

2. エラー処理モード

  1. エラー戻り値
    最も単純なエラー処理モードは、関数の戻り値としてエラーを返すことです。呼び出し元は、返されたエラー値に基づいて操作が成功したかどうかを判断できます。例:
result, err := divide(10, 2)
if err != nil {
    fmt.Printf("error: %s
", err.Error())
} else {
    fmt.Printf("result: %f
", result)
}
ログイン後にコピー
  1. エラー配信
    Golang では、エラーを渡して呼び出し元に処理させることができます。この場合、関数自体はエラーを処理せず、上位の呼び出し元にエラーを渡すことだけを担当します。例:
func processFile(filename string) error {
    file, err := os.Open(filename)
    if err != nil {
        return err
    }
    defer file.Close()

    // 处理文件

    return nil
}
ログイン後にコピー
  1. エラー回復
    エラーが発生したときに、回復してその後の操作を続行できるようにしたい場合があります。現時点では、遅延関数と回復関数を使用してエラーを回復できます。例:
func process() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Printf("recovered from panic: %v
", r)
        }
    }()

    panic("something went wrong") // 触发panic

    // 继续执行后续的操作
}
ログイン後にコピー

3. 一般的なエラー処理モード

  1. エラー ログの記録
    エラー処理のプロセスでは、通常、エラー情報がログに記録されます。問題を特定して解決するために。ロギングは、ログ パッケージの関数を使用して実装できます。例:
import "log"

func divide(a, b float64) (float64, error) {
    if b == 0 {
        err := errors.New("division by zero")
        log.Println(err)
        return 0, err
    }
    return a / b, nil
}
ログイン後にコピー
  1. 洗練されたエラー処理
    一部の一般的なエラーについては、呼び出し元が特定のエラー タイプに基づいて決定できるように、エラーを特定のエラー タイプに絞り込むことができます。それに応じて。たとえば、ゼロ除算エラーを表すカスタム エラー タイプを定義できます:
type DivisionError struct {
    dividend, divisor float64
}

func (e *DivisionError) Error() string {
    return fmt.Sprintf("division by zero: %f / %f", e.dividend, e.divisor)
}

func divide(a, b float64) (float64, error) {
    if b == 0 {
        err := &DivisionError{a, b}
        log.Println(err)
        return 0, err
    }
    return a / b, nil
}
ログイン後にコピー

これにより、呼び出し元は特定のエラー タイプに基づいてエラー処理を実行できます:

result, err := divide(10, 0)
if err != nil {
    if e, ok := err.(*DivisionError); ok {
        fmt.Printf("division error: %s
", e.Error())
    } else {
        fmt.Printf("error: %s
", err.Error())
    }
} else {
    fmt.Printf("result: %f
", result)
}
ログイン後にコピー

概要:
Golang プログラムを作成する場合、適切なエラー処理が非常に重要です。この記事では、エラー戻り、エラー配信、エラー回復などの一般的なエラー処理パターンについて説明します。これらのエラー処理パターンを正しく使用すると、コードの読みやすさ、保守性、信頼性を向上させることができます。この記事が、Golang ライブラリやフレームワークを開発する際のエラー処理において読者の役に立てば幸いです。

以上がGolang ライブラリとフレームワークのエラー処理パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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