在golang程序中,如果发生panic,要想程序不崩溃终止,可以使用defer recover:
    example:

    1. package main
    2. import (
    3. "fmt"
    4. )
    5. func badCall() {
    6. panic("bad end")
    7. }
    8. func test() {
    9. defer func() {
    10. if err := recover(); err != nil {
    11. fmt.Printf("Panicing %s\r\n", e)
    12. }
    13. }()
    14. badCall()
    15. fmt.Printf("After bad call\r\n") // <-- wordt niet bereikt
    16. }
    17. func main() {
    18. fmt.Printf("Calling test\r\n")
    19. test()
    20. fmt.Printf("Test completed\r\n")
    21. }

    输出结果:
    defer recover panic - 图1

    注意:recover()只能和defer一起使用
    见博文:http://wiki.jikexueyuan.com/project/the-way-to-go/13.3.html