Go 言語は、次のエラー処理メカニズムを提供します。エラーを直接処理します。関数本体の err 変数を確認します。 defer を使用する: 関数が正常を返すかエラーを返すかに関係なく、関数が終了するときにコードを実行して、リソースをクリーンアップしたり、エラー メッセージを出力したりします。リカバリを使用する: 通常、未処理のエラーが原因で発生するランタイム パニックをキャプチャします。カスタム タイプとエラー ラップ: カスタム エラー タイプを作成し、errors.Is 関数とerrors.As 関数を使用して他のエラーをラップし、型アサーションを可能にします。
Go 言語は、開発者が明確かつ統一された方法でエラーを処理できる強力なエラー処理メカニズムを提供します。この記事では、Go でのエラー処理のさまざまな戦略を紹介し、実際のケースを通じてそれらを示します。
Go では、エラー値は error
インターフェイスで表されます。これは、Error を実装するメソッドにすぎません。 ()### タイプ。エラー値は通常、
nil または
errors.New() 関数を介して作成されます。エラー値を定義して返す方法は次のとおりです。
func myFunction() error { return errors.New("error message") }
err 変数をチェックしてエラーを直接処理することです。
func main() { if err := myFunction(); err != nil { log.Println(err) } }
defer ステートメントを使用すると、関数が正常を返すかエラーを返すかに関係なく、関数の終了時にコードを実行できます。 。これは、リソースをクリーンアップしたり、エラー メッセージを出力したりするために使用できます。
func main() { defer func() { if err := recover(); err != nil { log.Println(err) } }() myFunction() }
#recover 関数を使用してキャプチャできます。通常は、未処理のエラーが原因で発生します。未処理のエラーは、
main 関数で
recover を呼び出すことで処理できます。
func main() { if err := recover(); err != nil { log.Println(err) } myFunction() }
errors.Is 関数と
errors.As 関数を使用して他のエラーをラップします。これにより、エラー階層内で型アサーションが可能になります。
type MyError struct { error } func main() { if err := myFunction(); err != nil { if myError, ok := err.(MyError); ok { log.Println(myError) } else { log.Println(err) } } }
func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database") if err != nil { log.Fatal(err) } defer db.Close() rows, err := db.Query("SELECT * FROM table") if err != nil { log.Println(err) return } defer rows.Close() for rows.Next() { var name string if err := rows.Scan(&name); err != nil { log.Println(err) continue } log.Println(name) } }
defer ステートメントを使用して、エラーが発生したときにデータベースとクエリ ハンドルが適切に閉じられるようにします。また、直接エラー処理を使用してエラー メッセージを出力し、単一のエラーによるアプリケーション全体の中断を避けるために処理を続行します。
以上がGolang 関数のエラー処理戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。