2,190
社区成员
发帖
与我相关
我的任务
分享
package main
import (
"fmt"
"time"
)
func do() {
//这里并不能获取da函数中的panic
defer func() {
if err := recover();err != nil{
fmt.Println(err)
}
}()
go da()
go db()
time.Sleep(3*time.Second)
}
func da(){
panic("panic da")
for i := 0; i<10; i++{
fmt.Println(i)
}
}
func db(){
for i := 0; i<10; i++{
fmt.Println(i)
}
}
func main() {
fmt.Println(do)
fmt.Println(da)
fmt.Println(db)
}
package main
import (
"fmt"
"time"
)
func do() int {
//这里并不能获取da函数中的panic
defer func() {
if err := recover();err != nil{
fmt.Println("do recover err: ", err)
} else {
fmt.Println("do err is nil");
}
} ()
fmt.Println("do invoke da return ", da())
fmt.Println("do before sleep")
time.Sleep(1*time.Second)
fmt.Println("do after sleep")
return 1
}
func da() int{
fmt.Println("---------- start da ----------")
defer func() {
if err := recover();err != nil{
fmt.Println("da recover err: ", err)
} else {
fmt.Println("da err is nil");
}
} ()
panic("panic da")
for i := 0; i<10; i++{
fmt.Println("da i = ", i)
}
fmt.Println("---------- end da ----------")
return 1
}
func main() {
fmt.Println("============= Start =============");
fmt.Println("do return ", do())
fmt.Println("da return ", da())
fmt.Println("============= End =============");
}
输出:
============= Start =============
---------- start da ----------
da recover err: panic da
do invoke da return 0
do before sleep
do after sleep
do err is nil
do return 1
---------- start da ----------
da recover err: panic da
da return 0
============= End =============package main
import (
"fmt"
//"errors"
//"os"
"time"
)
func do() int {
//这里并不能获取da函数中的panic
defer func() {
if err := recover();err != nil{
fmt.Println(err)
} else {
fmt.Println("err is nil");
}
//da()
} ()
go da()
//go db()
fmt.Println("do before sleep")
time.Sleep(3*time.Second)
fmt.Println("do after sleep")
return 1
}
func da() int{
panic("panic da")
for i := 0; i<10; i++{
fmt.Println("da i = ", i)
}
return 1
}
func db(){
for i := 0; i<10; i++{
fmt.Println("db i = ", i)
}
}
func main() {
fmt.Println("do return ", do())
fmt.Println("da return ", da())
fmt.Println(db)
println("func main end")
//os.Exit(1)
}
输出结果如下:
ame@ame:~/go/helloworld$ ./hello
panic: panic da
goroutine 3 [running]:
main.da
/home/ame/go/helloworld/hello.go:30
created by main.do
/home/ame/go/helloworld/hello.go:20
goroutine 1 [runnable]:
main.do
/home/ame/go/helloworld/hello.go:24
main.main
/home/ame/go/helloworld/hello.go:43