在go中可以使用defer + recover来捕获异常,使程序不会因为一个错误而终止,写法:
defer func() { if err := recover(); err != nil { fmt.Println("test()发生错误 err=", err) } }()
示例:
package main
import (
"fmt"
"time"
)
func hello() {
for i := 0; i < 10; i++ {
fmt.Println("hello world i=", i)
time.Sleep(time.Second)
}
}
func test() {
defer func() {
if err := recover(); err != nil {
fmt.Println("test()发生错误 err=", err)
}
}()
var myMap map[int]string
myMap[0] = "string"
}
func main() {
go hello()
go test()
for i := 0; i < 10; i++ {
fmt.Println("main =", i)
time.Sleep(time.Second)
}
}