在golang程序中,如果发生panic,要想程序不崩溃终止,可以使用defer recover:
example:
package main
import (
"fmt"
)
func badCall() {
panic("bad end")
}
func test() {
defer func() {
if err := recover(); err != nil {
fmt.Printf("Panicing %s\r\n", e)
}
}()
badCall()
fmt.Printf("After bad call\r\n") // <-- wordt niet bereikt
}
func main() {
fmt.Printf("Calling test\r\n")
test()
fmt.Printf("Test completed\r\n")
}
输出结果:
注意:recover()只能和defer一起使用
见博文:http://wiki.jikexueyuan.com/project/the-way-to-go/13.3.html