MST

星途 面试题库

面试题:Go语言自定义error类型与标准error的嵌套处理

在Go语言中,假设你有一个函数会返回自定义error类型,而这个函数调用了另一个会返回标准库中error类型的函数。请说明如何在你的函数中正确处理和返回这两种error,使得调用者能清晰区分和处理不同类型的错误,同时给出相关代码示例。
45.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 自定义错误类型: 首先定义一个自定义错误类型。
    package main
    
    import (
        "errors"
        "fmt"
    )
    
    // 定义自定义错误类型
    type CustomError struct {
        ErrMsg string
    }
    
    func (ce CustomError) Error() string {
        return ce.ErrMsg
    }
    
  2. 调用标准库错误函数并处理: 假设调用fmt.Println函数(这里仅作为示例,它返回标准库error类型),并在自定义函数中处理和返回不同类型错误。
    func myFunction() error {
        // 调用会返回标准库error类型的函数
        err := fmt.Println("This is a test")
        if err!= nil {
            // 处理标准库error
            return err
        }
        // 这里模拟发生自定义错误的情况
        if true {
            return CustomError{ErrMsg: "This is a custom error"}
        }
        return nil
    }
    
  3. 调用者处理错误: 调用myFunction并区分不同类型的错误。
    func main() {
        err := myFunction()
        if err!= nil {
            var customErr CustomError
            if errors.As(err, &customErr) {
                fmt.Printf("Custom error: %v\n", customErr)
            } else {
                fmt.Printf("Standard library error: %v\n", err)
            }
        }
    }
    

在上述代码中:

  • 首先定义了一个自定义错误类型CustomError,实现了error接口的Error方法。
  • myFunction函数中调用了fmt.Println函数,它返回标准库的error类型,并处理和返回错误。同时,函数中也模拟了返回自定义错误的情况。
  • main函数中,通过errors.As函数来判断错误是否是自定义错误类型CustomError,从而区分处理不同类型的错误。