MST

星途 面试题库

面试题:Go中Goroutine异常处理机制基础

在Go语言中,简述如何在Goroutine内捕获并处理运行时的panic异常?请给出一个简单的代码示例。
37.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,在Goroutine内捕获并处理运行时的panic异常可以使用recover函数。recover只能在defer修饰的函数中使用,用于捕获当前Goroutine中发生的panic。

以下是一个简单的代码示例:

package main

import (
    "fmt"
)

func main() {
    go func() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("捕获到panic:", r)
            }
        }()
        // 模拟一个会导致panic的操作
        panic("这是一个测试panic")
    }()

    // 防止主函数退出
    select {}
}

在上述代码中:

  1. 在匿名的Goroutine中,使用defer定义了一个函数。
  2. 在这个defer函数中,使用recover来捕获可能发生的panic。如果recover返回的值不为nil,说明发生了panic,此时可以对其进行处理,这里简单地打印出捕获到的panic信息。
  3. 主函数使用select {}来防止程序直接退出,以便观察Goroutine内的处理结果。