MST

星途 面试题库

面试题:Go中如何使用defer和recover优雅处理函数内部异常

在Go语言中,编写一个函数,该函数可能会发生除零错误。请使用defer和recover机制来捕获这个错误,并返回一个有意义的错误信息,而不是程序崩溃。
12.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

func divide(a, b int) (int, error) {
    var result int
    defer func() {
        if r := recover(); r != nil {
            result = 0
            err, ok := r.(error)
            if!ok {
                err = fmt.Errorf("unknown error: %v", r)
            }
            fmt.Println("捕获到错误:", err)
        }
    }()
    if b == 0 {
        panic(fmt.Errorf("division by zero"))
    }
    result = a / b
    return result, nil
}

你可以这样调用这个函数:

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("错误:", err)
    } else {
        fmt.Println("结果:", result)
    }
}