MST

星途 面试题库

面试题:Go中如何在goroutine中处理常见的运行时异常

在Go语言的goroutine中,如果出现除零操作等运行时异常,通常会导致程序崩溃。请描述如何使用`recover`函数来捕获并处理这类异常,以避免整个程序崩溃,并给出一个简单的代码示例。
38.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,recover函数用于在defer函数中捕获并处理运行时异常。以下是如何使用它来避免因除零操作等异常导致程序崩溃的描述及示例:

  1. 使用方式

    • 在可能出现异常的代码块中,使用defer关键字注册一个匿名函数,在这个匿名函数中调用recover
    • 如果在defer之前发生了运行时异常,recover会捕获到这个异常并返回异常值(如果没有异常则返回nil),这样就可以对异常进行处理,而不是让程序崩溃。
  2. 代码示例

package main

import (
    "fmt"
)

func main() {
    go func() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("捕获到异常:", r)
            }
        }()
        // 这里进行除零操作,会引发运行时异常
        result := 1 / 0
        fmt.Println("结果:", result)
    }()

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

在上述代码中,go关键字开启了一个新的goroutine,在这个goroutine中,defer注册了一个匿名函数用于捕获异常。当执行到1 / 0时会引发运行时异常,recover会捕获到这个异常并打印出异常信息,从而避免整个程序崩溃。select {}语句用于阻塞主线程,防止程序在goroutine执行完毕前退出。