Go言語での例外処理にはどのような方法があるのでしょうか?
Go 言語は、従来の意味での例外処理メカニズムをサポートしていませんでしたが、Go 言語には、さまざまな種類のエラーを処理するために使用できるエラー処理メソッドがいくつかあります。この記事ではGo言語での例外処理方法を紹介します。
- エラー戻り値
Go 言語では、関数から返される値がエラー型の値である場合、関数で何らかのエラーが発生する可能性があることを意味します。関数。この関数が呼び出されると、返されたエラー値がチェックされて、プログラムの実行を続行する方法が決定されます。このメソッドは比較的直接的かつシンプルで、Go 言語の主要なエラー処理メソッドです。
例:
func Divide(a, b int) (int, error) { if b == 0 { return 0, fmt.Errorf("can't divide by zero") } return a / b, nil }
除数が 0 の場合、関数はエラー値を返すことがわかります。この関数を呼び出すと、戻り値でエラーが発生したかどうかがチェックされ、エラー値が nil でない場合、プログラムは対応するエラー処理コードを実行します。
result, err := Divide(5, 0) if err != nil { log.Fatal(err) }
- defer/panic/recover
Go 言語には従来の意味での例外処理メカニズムがありませんが、defer、panic、recover の組み合わせが提供されます。機能が間違っています。この組み合わせは、「遅延パニック回復」メカニズムと呼ばれます。
- defer: この関数は、現在の関数が終了する前に実行する必要があるステートメントを呼び出します。任意のステートメントを使用できます。これらは通常、リソースを解放したり、リソースの順序を管理したりするために使用されます。
- panic: この関数は、現在のプログラムの実行を即座に停止できます。そして、プログラムの呼び出しスタックの最上位レベルでリカバリ関数にエラー値を渡し始めます。エラー値が処理されない場合、プログラムは終了します。
- recover: この関数は、panic () 関数の最後に渡されたエラー値をキャプチャし、エラーを返し、プログラムをパニック終了するプロセスを早期に停止するために使用されます。
例:
func Foo() { defer func() { if r := recover(); r != nil { log.Println("Recovered:", r) } }() panic("I'm panic!") fmt.Println("Continuing execution...") }
ご覧のとおり、パニック関数呼び出しはプログラムの実行を終了する方法です。複数の遅延関数がある場合、それらは FILO 順序で実行されるため、recover 関数は最も外側の遅延関数に配置する必要があります。
- カスタム エラー タイプ
Go 言語には、エラー タイプをカスタマイズする方法も用意されています。特定のエラーをよりきめ細かく処理する必要がある場合は、エラーの種類をカスタマイズできます。
例:
type DivideError struct { dividend int divisor int } func (de DivideError) Error() string { return fmt.Sprintf("can't divide %d by %d", de.dividend, de.divisor) } func Divide(a, b int) (int, error) { if b == 0 { return 0, DivideError{a, b} } return a / b, nil }
この例では、新しいエラー タイプ DivideError を定義します。このタイプには、除数と被除数が含まれます。この型は、エラー メッセージを返す Error メソッドも実装します。 Divide 関数では、除数が 0 の場合、初期化された DivideError 型が返されます。
result, err := Divide(5, 0) if de, ok := err.(DivideError); ok { log.Fatalf("Error handled by application: %s ", de.Error()) } else if err != nil { log.Fatal(err) }
カスタム型をエラーとして使用する場合、特定の種類のエラーを処理するには、型変換に型アサーションを使用する必要があることに注意してください。
この記事では、Go 言語で例外を処理する方法 (エラー戻り値、defer-panic-recover メカニズム、カスタム エラー タイプ) を紹介します。もちろん、実際の開発においては、状況に応じて最適な例外処理方法を選択する必要があります。
以上がGo言語での例外処理にはどのような方法があるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPでは、Try、Catch、最後にキーワードをスローすることにより、例外処理が達成されます。 1)TRYブロックは、例外をスローする可能性のあるコードを囲みます。 2)キャッチブロックは例外を処理します。 3)最後にブロックは、コードが常に実行されることを保証します。 4)スローは、例外を手動でスローするために使用されます。これらのメカニズムは、コードの堅牢性と保守性を向上させるのに役立ちます。

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...
