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) }
Go 言語には従来の意味での例外処理メカニズムがありませんが、defer、panic、recover の組み合わせが提供されます。機能が間違っています。この組み合わせは、「遅延パニック回復」メカニズムと呼ばれます。
例:
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 サイトの他の関連記事を参照してください。