MST

星途 面试题库

面试题:Go语言中recover在简单错误处理场景的应用

请用Go语言编写一个函数,该函数执行一个可能会发生panic的操作,然后使用recover来捕获panic,并返回一个有意义的错误信息。例如,模拟一个数组越界访问的panic,捕获后返回‘数组访问越界’这样的错误信息。
40.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func riskyOperation() error {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获到panic:", r)
        }
    }()

    var arr [5]int
    returnValue := arr[10] // 模拟数组越界访问,会触发panic
    return nil
    // 这里实际无法执行到,仅为了避免编译错误。
    // 实际上捕获到panic后,函数应返回错误信息
}

func main() {
    err := riskyOperation()
    if err != nil {
        fmt.Println("错误:", err)
    }
}

以上代码可优化为:

package main

import (
    "fmt"
)

func riskyOperation() error {
    defer func() {
        if r := recover(); r != nil {
            return fmt.Errorf("数组访问越界")
        }
    }()

    var arr [5]int
    _ = arr[10] // 模拟数组越界访问,会触发panic
    return nil
}

func main() {
    err := riskyOperation()
    if err != nil {
        fmt.Println("错误:", err)
    }
}

优化后的代码,在defer函数中捕获panic并返回有意义的错误信息。在实际应用中,建议将错误返回给调用者进行处理。

  1. 定义riskyOperation函数,该函数内部会执行可能引发panic的操作。
  2. 使用defer关键字定义一个匿名函数,这个匿名函数会在riskyOperation函数结束时执行(无论是否发生panic)。
  3. 在匿名函数中,使用recover函数捕获panic。如果捕获到panic,则返回一个表示“数组访问越界”的错误信息。
  4. main函数中调用riskyOperation函数,并检查返回的错误。如果有错误,则打印错误信息。