面试题答案
一键面试在Go语言中,常规错误处理方式如下:
error接口的使用
Go语言内建了一个 error
接口类型,用于表示错误。任何实现了 error
接口的类型的值都可以作为错误值。error
接口只有一个方法 Error() string
,该方法返回错误的字符串描述。例如:
type MyError struct {
ErrMsg string
}
func (m MyError) Error() string {
return m.ErrMsg
}
在函数调用中检查和传递错误
- 检查错误:在调用一个可能返回错误的函数后,需要立即检查返回的错误值。如果错误值不为
nil
,则表示发生了错误,应进行相应处理。例如:
func readFileContent(filePath string) (string, error) {
data, err := ioutil.ReadFile(filePath)
if err != nil {
return "", err
}
return string(data), nil
}
在上述代码中,调用 ioutil.ReadFile
函数读取文件内容,若 err
不为 nil
,表示读取文件出错,直接返回错误。
- 传递错误:当函数内部调用其他可能返回错误的函数时,如果发生错误,通常直接将错误返回给调用者,让调用者决定如何处理。例如:
func processFile(filePath string) error {
content, err := readFileContent(filePath)
if err != nil {
return err
}
// 处理文件内容
// ...
return nil
}
在 processFile
函数中,调用 readFileContent
函数读取文件内容,如果 readFileContent
返回错误,processFile
函数直接将错误返回给它的调用者。
完整示例
package main
import (
"fmt"
"io/ioutil"
)
func readFileContent(filePath string) (string, error) {
data, err := ioutil.ReadFile(filePath)
if err != nil {
return "", err
}
return string(data), nil
}
func processFile(filePath string) error {
content, err := readFileContent(filePath)
if err != nil {
return err
}
fmt.Println("文件内容:", content)
return nil
}
func main() {
filePath := "test.txt"
err := processFile(filePath)
if err != nil {
fmt.Println("处理文件出错:", err)
}
}
在这个示例中,main
函数调用 processFile
函数处理文件,processFile
函数又调用 readFileContent
函数读取文件内容,各级函数都正确处理和传递了可能出现的错误。