
关键字介绍
panicpanicjavathrowrecoverrecoverjavatry ... catch
使用
panic
panicpanicdefer
panic
package main
import "fmt"
func main() {
// 第一个协程
go func() {
var i int
for {
i++
fmt.Println("协程1")
time.Sleep(1*time.Second)
// 3秒后发生panic
if i==3 {
panic("异常退出")
}
}
}()
// 第二个协程
go func() {
for {
fmt.Println("协程2")
time.Sleep(1*time.Second)
}
}()
// 让主协程不退出
for {
time.Sleep(1*time.Second)
}
}
panic("异常退出")
协程2
协程1
协程2
协程1
协程2
协程1
协程2
panic: 异常退出
goroutine 6 [running]:
main.main.func1()
/home/zheng/STUDY/GoWork/demo/main.go:28 +0xb9
created by main.main
/home/zheng/STUDY/GoWork/demo/main.go:15 +0x35
panicrecovery
panicgorecoverygoroutinepanicrecoverydeferrecoverypanicpanicdefer
recovery
// 第一个协程
go func() {
// 捕获异常
defer func() {
err:=recover()
fmt.Printf("捕获的:%s\n",err)
}()
var i int
for {
i++
fmt.Println("协程1")
time.Sleep(1*time.Second)
// 3秒后发生panic
if i==3 {
panic("异常退出")
}
}
}()
协程2
协程1
协程1
协程2
协程2
协程1
协程2
捕获的:异常退出
协程2
协程2
...
recoverypanic