golang がエラーと例外を処理する方法

PHPz
リリース: 2023-04-11 14:46:29
オリジナル
828 人が閲覧しました

Golang は強力な例外処理メカニズムを備えた静的型付け言語ですが、すべてのプログラマーはエラーや例外に遭遇する可能性があります。この記事では、Golang でエラーと例外を処理する方法を検討し、いくつかのベスト プラクティスを紹介します。

エラーとパニック

Golang では、エラーと例外は 2 つの異なる概念です。エラーは多くの場合、存在しないファイルを開いたり、ネットワーク接続に失敗したりするなど、予測可能な一般的な状況や操作の失敗です。対照的に、例外は通常、メモリ オーバーフローによるプログラムのクラッシュなど、制御されていない未知のエラー状態です。

Golang には、エラー処理と例外処理の両方の状況に対応するメカニズムがあります。エラーが発生すると、Golang はエラーの種類を返します。例外が発生すると、プログラムがクラッシュし、パニックが発生します。これにより、エラーと例外を処理する強力な方法がいくつか提供されます。

Golang のエラー処理

Golang のエラー処理は、パッケージのドキュメントに記載されているエラー タイプのインターフェイスに基づいています。このインターフェイスを実装する型はエラーを表し、通常はエラーの原因を説明する文字列です。関数がエラーを返した場合、エラーが nil かどうかを確認する必要があります。nil であれば操作は成功し、それ以外の場合は操作は失敗し、エラーが返されます。

Golang エラー処理を使用した簡単な例を見てみましょう:

package main

import (
    "errors"
    "fmt"
)

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

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}
ログイン後にコピー

は結果を出力します: ゼロによる除算

上記の例では、 2 つの整数を受け入れる関数 divide を定義します。除数がゼロの場合、関数はエラーを返します。 main 関数は、divide 関数のエラー値をチェックすることで操作が成功したかどうかを確認し、操作が失敗した場合はエラー メッセージを出力します。

Golang 例外処理

エラー処理に加えて、Golang には例外処理もあります。例外処理は通常、メモリ不足によるパニックなど、エンコード プロセス中に予測できないエラーを処理するために使用されます。

Golang の例外処理メカニズムは、組み込み関数 Panic() および Recovery() を通じて実装されます。プログラムが Panic() 関数を呼び出すと、プログラムがクラッシュし、エラー メッセージとスタック トレースが出力されます。 reverse() 関数が defer ステートメント ブロック内で呼び出された場合、パニックが捕捉され、プログラムは実行を継続します。

簡単な例を使用して、パニックとリカバリの使用法を説明します。

package main

import "fmt"

func myFunc() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in myFunc", r)
        }
    }()
    fmt.Println("Calling Panic")
    panic("PANIC")
    fmt.Println("Returned from myFunc")
}

func main() {
    fmt.Println("Calling myFunc")
    myFunc()
    fmt.Println("Returned from myFunc")
}
ログイン後にコピー

出力結果は次のとおりです。

Calling myFunc
Calling Panic
Recovered in myFunc PANIC
Returned from myFunc
ログイン後にコピー

上記の例では、関数を定義しますmyFunc では、panic 関数を呼び出してパニックをトリガーします。 myFunc 関数では、defer ステートメント ブロックを使用して関数 recover を呼び出します。この関数は例外をキャッチし、制御が現在のプロセスに戻るときにそれを使用します。 Panic と Recovery は通常、ロールバック コードとリカバリ コードを処理するために使用されますが、通常の状況では、panic() と Recovery() を使用することはお勧めできません。

Golang のベスト プラクティス

Golang のエラー処理と例外処理のベスト プラクティスをいくつか示します:

  • 考えられる間違いをできるだけ詳しく説明します。
  • Golang では例外ではなくエラーを使用することをお勧めします。 Go は、例外を必要とせずにエラー状態を処理するように設計されています。
  • エラー処理でエラーを出力するには fmt パッケージを使用すると、より有用な情報を出力できます。
  • 可能な場合はタプルを使用してエラーを返します。
  • わかりやすいエラー名を付けてください。

結論

Golang では、エラーと例外の処理は、開発者が対処しなければならない重要な側面です。この記事では、エラーと例外の違いを検討し、Golang で最も一般的に使用されるエラーおよび例外処理メカニズムを紹介します。この知識は、保守可能なコードを作成し、エラーの可能性を最小限に抑えるのに役立ちます。

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

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