面试题答案
一键面试package main
import (
"fmt"
"time"
)
func worker() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in worker:", r)
}
}()
// 模拟会引发 panic 的操作
panic("Something went wrong in worker")
}
func main() {
go worker()
// 等待一段时间,确保 worker goroutine 有机会执行
time.Sleep(2 * time.Second)
fmt.Println("Main goroutine continues running")
}
上述代码中:
worker
函数是一个独立的 goroutine,它内部使用defer
语句和recover
函数来捕获可能发生的panic
。- 在
main
函数中启动worker
goroutine,并通过time.Sleep
等待一段时间,确保worker
有机会执行。这样即使worker
发生panic
,main
函数也不会崩溃,并且worker
中的panic
会被捕获并处理。