Golang は、プログラマーが大規模なプログラムを簡単に管理および作成できるようにする効率的なソリューションとなるように設計された最新のプログラミング言語です。 Golang は同時プログラミングに優れており、一部の高可用性アプリケーションで広く使用されています。ただし、エラーを処理しないとシステムの動作が不安定になる可能性があるため、アプリケーションを開発するときは常にエラー処理に注意を払う必要があります。この記事では、Golang でグローバル エラーを捕捉する方法について説明します。
エラー処理は、高品質のアプリケーションを作成する上で重要な部分です。 Golang には、2 つのエラー タイプがあります。
1 つは、関数シグネチャの一般的な形式で定義できるエラー タイプです。これらのエラーは、関数がスローする可能性のあるエラーです。
もう 1 つは、null ポインター参照や無限ループなどの実行時エラーです。
エラーの種類に関係なく、プログラムを作成するときは注意が必要です。一般的なエラー処理方法は、グローバル ErrorHandler を使用することです。グローバル ErrorHandler はプログラム全体でエラーをキャッチできます。すべてのエラーを 1 か所で処理できるため、これは非常に良い選択です。
まず、グローバル ErrorHandler を定義する必要があります:
func globalErrorHandler(err error) { fmt.Printf("Recovered from panic, error message: %v", err) }
次に、メイン関数でリカバリ関数を呼び出すことができます。この関数はグローバル ErrorHandler を登録します:
func main() { defer func() { if err := recover(); err != nil { globalErrorHandler(fmt.Errorf("%v", err)) } }() // your code here }
ここでは defer キーワードを使用して、関数が終了する前に ErrorHandler が確実に呼び出されるようにします。このアプローチにより、main 関数またはその他のコードによってエラーがスローされた場合でも、時間内にそれをキャッチして処理できることが保証されます。
ErrorHandler を登録した後、Golang のパニック メカニズムを使用してエラーをシミュレートできます。 Panic が呼び出されると、定義した globalErrorHandler が自動的に呼び出されます。その後、エラーの詳細を ErrorHandler に出力したり、その後のデバッグのためにログ システムに送信したりできます。
ErrorHandler をテストするには、次のような単純な関数を作成します。
func someFunc() { a := []int{1, 2, 3} fmt.Println(a[5]) }
関数内でスライス範囲外のインデックスを使用すると、パニックが発生します。この時点で、ErrorHandler をテストして、エラーが正しくキャッチされることを確認できます。
最後に、これらをサンプル プログラムに統合します。
package main import ( "fmt" ) func globalErrorHandler(err error) { fmt.Printf("Recovered from panic, error message: %v", err) } func someFunc() { a := []int{1, 2, 3} fmt.Println(a[5]) } func main() { defer func() { if err := recover(); err != nil { globalErrorHandler(fmt.Errorf("%v", err)) } }() someFunc() }
これで、メイン関数で他の関数を呼び出し、無効なインデックスを使用しようとしてエラーをトリガーできるようになります。このとき、定義したグローバル ErrorHandler がエラー情報を取得して出力します。
つまり、Golang は効率的なプログラミング言語であり、同時プログラミング機能も優れています。ただし、同時プログラミングでも他のアプリケーション シナリオでも、エラーは慎重に処理する必要があります。エラーを処理する場合、グローバル ErrorHandler を使用することは、アプリケーションで検出したすべてのエラーが確実に一元的に処理されるため、非常に優れたソリューションです。
以上がgolang キャプチャ グローバル エラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。