golang関数のエラー処理モード

WBOY
リリース: 2024-05-04 13:27:01
オリジナル
395 人が閲覧しました

Go で関数エラーを処理する一般的なパターンは次のとおりです。 エラーを返す: 関数はエラー値を返します。成功した場合は nil を、失敗した場合はエラー タイプを返します。グローバル変数: グローバル変数を使用してエラー値を保存すると、関数がエラー値に簡単にアクセスして使用できるようになります。パニック: エラーが深刻で関数の実行を続行できない場合に使用され、関数は直ちに終了され、エラーが呼び出し元に伝達されます。遅延: defer ステートメントを使用して、関数が戻る前にコードを実行します。これは、関数の終了までクリーンアップ操作やエラー処理を遅らせるのに適しています。

golang関数のエラー処理モード

Go での関数エラー処理パターン

Go での関数エラーの処理は、堅牢で信頼性の高いアプリケーションを構築するために重要です。エラー処理には一般的なパターンがいくつかあり、それぞれに独自の利点と欠点があります。

1. エラーを返す

最も簡単な方法は、関数にエラー値を返すことです。操作が成功した場合、関数は nil を返します。それ以外の場合は、error やカスタム エラー タイプなどのエラーを表すタイプを返します。

func divide(x, y int) (int, error) {
    if y == 0 {
        return 0, fmt.Errorf("cannot divide by zero")
    }
    return x / y, nil
}
ログイン後にコピー

2. グローバル変数

このメソッドは、グローバル変数を使用してエラー値を保存します。この利点は、関数が他の関数から呼び出された場合でも、エラー値に簡単にアクセスして使用できることです。

var err error

func init() {
    // 初始化 err 变量
}

func calculate() {
    // ...
    err = fmt.Errorf("an error occurred")
}

func handleError() {
    if err != nil {
        // 处理错误
    }
}
ログイン後にコピー

3. パニック

エラーが重大で関数の実行を続行できない場合は、パニックを使用できます。 Panic は関数をただちに終了し、そのエラーを呼び出し元に伝えます。

func someFunction() {
    // ...
    if err != nil {
        panic(err)
    }
}
ログイン後にコピー

4. 遅延

defer ステートメントは、関数が戻る前にコードを実行します。これにより、クリーンアップ操作やエラー処理を関数の終了まで延期できます。

func readFile() (string, error) {
    defer file.Close()

    // ...
}
ログイン後にコピー

実践的なケース: ファイルの読み取りと書き込み

import (
    "fmt"
    "io"
    "os"
)

func readFile(path string) ([]byte, error) {
    file, err := os.Open(path)
    if err != nil {
        return nil, fmt.Errorf("open file: %w", err)
    }

    // 使用 defer 语句延迟关闭文件,确保在函数返回之前关闭
    defer file.Close()

    // ... 读取文件内容

    return data, nil
}
ログイン後にコピー

以上がgolang関数のエラー処理モードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!