Go で defer でエラーを処理するには 2 つの方法があります: 1. エラーをキャッチするカスタム エラー タイプを作成する; 2. パニックをキャッチするために、recover() を使用します。たとえば、recover() を使用して defer 内のエラーをキャプチャするには、次のように記述できます: defer func() { if err := err != nil { fmt.Println(err) } }。
Golang では、defer
ステートメントを使用して、例外が発生したかどうかに関係なく、関数内の操作が関数が返された直後に実行されるようにします。ただし、defer
関数の実行中にエラーが発生した場合、通常、これらのエラーは無視されます。 defer
语句用于确保函数中的操作在函数返回后立即执行,无论是否发生异常。然而,如果在 defer
函数执行期间发生错误,则这些错误通常会被忽略。
要处理 defer
期间的错误,有两种主要方法:
一种方法是创建一个自定义错误类型来捕获 defer
函数的错误。例如:
import ( "fmt" ) type DeferError struct { err error } func (e DeferError) Error() string { return fmt.Sprintf("Defer error: %v", e.err) }
recover()
另一种方法是使用 recover()
来捕获 defer
函数中发生的恐慌。例如:
import "fmt" func main() { defer func() { if err := recover(); err != nil { fmt.Println(err) } }() panic("defer error") }
考虑以下示例:
import ( "fmt" "os" ) func writeToFile(filename string) { defer os.Remove(filename) // 删除文件 f, err := os.Create(filename) if err != nil { panic(fmt.Sprintf("Error creating file: %v", err)) } // 执行 IO 操作 ... }
在这个示例中,defer
函数用于确保在函数返回后删除文件。但是,如果文件创建失败 (os.Create
出错),defer
函数将无法执行,因为函数会提前返回。
要捕获这个错误,我们可以使用以下方法:
func writeToFile(filename string) { defer func() { if err := recover(); err != nil { fmt.Println(err) } os.Remove(filename) // 删除文件 }() f, err := os.Create(filename) if err != nil { panic(fmt.Sprintf("Error creating file: %v", err)) } // 执行 IO 操作 ... }
现在,如果文件创建失败,defer
defer
中のエラーを処理するには、主に 2 つの方法があります: 🎜 エラーをキャッチするカスタム エラー タイプを作成することです。
関数。例: 🎜rrreeerecover()
recover()
を使用して defer
をキャプチャすることです。機能パニック。例: 🎜rrreeedefer
関数を使用して、関数が戻った後にファイルが削除されるようにしています。 。ただし、ファイルの作成が失敗した場合 (os.Create
エラー)、defer
関数は早期に返されるため実行されません。 🎜🎜このエラーを捕捉するには、次のメソッドを使用できます: 🎜rrreee🎜 これで、ファイルの作成が失敗した場合でも、 defer
関数は例外をスローしないため、引き続き実行されます。 🎜以上がGolang で遅延中に発生するエラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。