面试题答案
一键面试在Go语言中,可以使用recover
函数来捕获panic
,防止程序崩溃。以下是示例代码:
package main
import (
"fmt"
"time"
)
func worker1() {
defer func() {
if r := recover(); r != nil {
fmt.Println("worker1 caught panic:", r)
}
}()
// 模拟可能发生panic的操作
panic("worker1 panic")
}
func worker2() {
for i := 0; i < 3; i++ {
fmt.Println("worker2 is running:", i)
time.Sleep(time.Second)
}
}
func main() {
go worker1()
go worker2()
time.Sleep(5 * time.Second)
fmt.Println("main function exiting")
}
在上述代码中:
worker1
函数使用defer
语句配合recover
函数来捕获可能发生的panic
。如果发生panic
,recover
会返回panic
的值,这样就可以在defer
函数中处理这个panic
,而不会导致整个程序崩溃。worker2
函数是一个正常运行的goroutine
,它不受worker1
中panic
的影响,继续正常执行。- 在
main
函数中,启动了worker1
和worker2
两个goroutine
,并等待一段时间,确保goroutine
有足够的时间运行。