Go では、関数スタックから最新のパニック値を返す回復関数を使用してパニックから回復します。実際の戦闘では、たとえば、ファイルを開いて defer を使用してパニックをキャッチすることができます。パニックが io.EOF と等しい場合は、通常どおり終了します。そうでない場合は、パニックが発生します。
Golang では、panic
によりプログラムが異常終了します。 panic
は回復不可能なエラーの処理に役立ちますが、回復して実行を継続したい場合もあります。 panic
会导致程序异常退出。虽然 panic
对于处理不可恢复的错误很有用,但在某些情况下,你可能希望恢复并继续执行。
使用 recover
函数可以从 panic
中恢复。recover
会从当前函数函数栈中返回最近的 panic
信息,并返回 interface{}
类型的 panic 值。
func main() { // 包装可能会产生 panic 的代码 defer func() { if err := recover(); err != nil { // 处理 panic fmt.Println("recovered from panic:", err) } }() // 可能产生 panic 的代码 panic("this will cause a panic") }
实战案例
以下是一个从文件读取数据时处理 io.EOF
パニック
から回復するには、recover
関数を使用します。 recover
は、現在の関数関数スタックから最新の panic
情報を返し、interface{}
タイプのパニック値を返します。 🎜package main import ( "fmt" "io" "os" ) func main() { f, err := os.Open("data.txt") if err != nil { panic(err) } defer f.Close() defer func() { if err := recover(); err != nil { if err == io.EOF { fmt.Println("reached end of file") } else { panic(err) } } }() // 读取数据 data := make([]byte, 1024) for { n, err := f.Read(data) if err != nil { if err == io.EOF { // 达到文件末尾,正常退出 break } else { // 其他错误,引发 panic panic(err) } } // 处理读取到的数据 } }
io.EOF
例外を処理する例です。以上がGolang でパニックから回復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。