エラー処理実践ガイド: 組み込みエラー タイプ: 組み込みタイプを使用してカスタム エラーを作成します。エラー インターフェイス: %w 構文を使用してエラーをラップし、コンテキストを提供します。エラーの確認: == nil を使用して、エラーが存在するかどうかを確認します。エラー ガード: エラー処理を簡素化します。カスタム タイプ: エラーを示し、詳細情報を提供するカスタム タイプを作成します。リカバリ: パニック発生時に関数を復元するには、recover() を使用します。
Go 関数エラーを処理するための実践ガイド
はじめに
正しく理解するGo ではエラーの処理が重要であり、アプリケーションの安定性と保守性を大幅に向上させることができます。この記事では、さまざまなエラー処理手法を紹介し、その使用法を示す実践的な例を示します。
1. 組み込みエラー タイプ
Go には、errors.New()
や ## など、いくつかの組み込みエラー タイプが用意されています。 #fmt.エラー("")。これらのタイプを使用してカスタム エラーを作成できます。
2. error インターフェイス
error このインターフェイスを使用すると、さまざまなエラー タイプを相互に互換させることができます。
%w 構文を使用して、エラーをラップしてコンテキストを提供できます。
実践的なケース 1:
import "errors" func OpenFile(fname string) error { f, err := os.Open(fname) if err != nil { return errors.New("failed to open file: " + err.Error()) } return nil }
3. エラーの確認
== nil# を使用できます。 # # エラーをチェックします。 nil
の場合は、エラーがないことを意味します。
func OpenFile(fname string) *os.File {
f, err := os.Open(fname)
if err != nil {
return nil
}
return f
}
エラー ガード構文 (
if err := f(); err != nil { ... }) は、簡略化されたエラー処理方法を提供します。
func OpenFile(fname string) (*os.File, error) {
if f, err := os.Open(fname); err != nil {
return nil, err
} else {
return f, nil
}
}
エラーを表すカスタム タイプを作成できます。追加情報を提供します。
実践的なケース 4:type FileError struct {
fname string
err error
}
func (e FileError) Error() string {
return fmt.Sprintf("failed to open file %s: %s", e.fname, e.err)
}
func OpenFile(fname string) (*os.File, error) {
f, err := os.Open(fname)
if err != nil {
return nil, &FileError{fname, err}
}
return f, nil
}
使用
recover()パニック時の再開機能で実行されます。
func OpenFile(fname string) *os.File {
defer func() {
if r := recover(); r != nil {
fmt.Printf("recover: %s\n", r)
}
}()
f, err := os.Open(fname)
if err != nil {
panic(err)
}
return f
}
以上がGolang 関数のエラー処理実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。