面试题答案
一键面试- 自定义错误类型:
首先定义一个自定义错误类型。
package main import ( "errors" "fmt" ) // 定义自定义错误类型 type CustomError struct { ErrMsg string } func (ce CustomError) Error() string { return ce.ErrMsg }
- 调用标准库错误函数并处理:
假设调用
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 }
- 调用者处理错误:
调用
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
,从而区分处理不同类型的错误。