Dalam Go, pulihkan daripada panik menggunakan fungsi pulih, yang mengembalikan nilai panik terkini daripada timbunan fungsi. Dalam pertempuran sebenar, anda boleh mengendalikan pengecualian io.EOF, contohnya: buka fail dan gunakan tunda untuk menangkap panik Jika panik sama dengan io.EOF, keluar seperti biasa, jika tidak panik akan berlaku.
Di Golang, panik
akan menyebabkan program keluar secara tidak normal. Walaupun panik
berguna untuk mengendalikan ralat yang tidak dapat dipulihkan, terdapat situasi di mana anda mungkin ingin memulihkan dan meneruskan pelaksanaan. 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
untuk memulihkan daripada panik
. recover
akan mengembalikan maklumat panik
terkini daripada timbunan fungsi fungsi semasa dan mengembalikan nilai panik jenis antara muka{}
. 🎜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
semasa membaca data daripada fail: 🎜rrreeeAtas ialah kandungan terperinci Bagaimana untuk pulih daripada panik di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!