面试题答案
一键面试-
自定义error类型满足error接口规范的条件: 在Go语言中,
error
接口只有一个方法Error() string
。所以自定义的错误类型需要实现这个方法,该方法返回一个字符串,用于描述错误信息。 -
与标准库函数协同工作及代码示例: 下面是一个示例,展示如何自定义错误类型并与
io
包函数协同工作。假设我们有一个读取文件的场景,当文件内容不符合特定格式时返回自定义错误。
package main
import (
"fmt"
"io/ioutil"
)
// 自定义错误类型
type MyCustomError struct {
ErrMsg string
}
// 实现error接口的Error方法
func (m MyCustomError) Error() string {
return m.ErrMsg
}
func readFileAndCheck() error {
data, err := ioutil.ReadFile("test.txt")
if err != nil {
return err
}
// 假设文件内容必须以"specific"开头,否则返回自定义错误
if len(data) < 8 || string(data[:8]) != "specific" {
return MyCustomError{ErrMsg: "file content does not meet the specific format"}
}
return nil
}
func main() {
err := readFileAndCheck()
if err != nil {
if customErr, ok := err.(MyCustomError); ok {
fmt.Printf("Custom error: %v\n", customErr)
} else {
fmt.Printf("Other error: %v\n", err)
}
}
}
在上述代码中:
- 定义了
MyCustomError
结构体作为自定义错误类型。 - 为
MyCustomError
实现了Error()
方法,满足error
接口规范。 readFileAndCheck
函数调用ioutil.ReadFile
读取文件,之后根据业务逻辑判断文件内容,若不符合要求返回自定义错误,若读取文件本身出错则返回标准库的错误。- 在
main
函数中,通过类型断言判断错误是否为自定义错误类型,以便进行不同的处理。这样就实现了自定义错误类型与标准库函数的错误处理机制协同工作。