MST

星途 面试题库

面试题:Go语言中在并发环境下如何使用defer和recover处理错误

请描述在Go语言的并发函数中,如何结合defer语句和recover函数来捕获并处理可能出现的异常,同时给出一个简单示例代码。
38.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言的并发函数中,可以通过以下方式结合defer语句和recover函数来捕获并处理可能出现的异常:

  1. 在并发函数内部使用defer语句注册一个匿名函数,该匿名函数中调用recover函数。
  2. 当有异常发生时,recover函数会捕获到异常,从而避免程序崩溃。

示例代码如下:

package main

import (
    "fmt"
)

func main() {
    go func() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("捕获到异常:", r)
            }
        }()
        panic("模拟一个异常")
    }()

    // 防止主程序退出
    select {}
}

在上述代码中:

  1. go func()启动了一个并发函数。
  2. defer语句注册的匿名函数中通过recover()捕获可能发生的异常。
  3. panic("模拟一个异常")模拟了一个异常情况,此时recover函数会捕获到这个异常,并打印出相应的提示信息。
  4. select {}语句防止主程序退出,以便观察并发函数中的异常处理情况。