1. 章节简介
- Go 提供
error 接口作为错误处理标准方式。
- 常见方式:返回
error、自定义错误类型、panic/recover。
2. 知识点讲解
(1) error 类型
type error interface {
Error() string
}
(2) 返回 error
import "errors"
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
(3) 自定义错误
type MyError struct {
Msg string
}
func (e MyError) Error() string {
return e.Msg
}
(4) panic/recover
-
panic:程序遇到严重错误时退出。
-
recover:在
defer 中捕获 panic,防止程序崩溃。
func mayPanic() {
panic("Something went wrong")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from:", r)
}
}()
mayPanic()
fmt.Println("Program continues")
}
3. 代码示例
package main
import (
"errors"
"fmt"
)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
res, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", res)
}
res, err = divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
}
}
4. 练习任务
- 写函数
openFile(filename string),当文件不存在时返回错误。
- 使用
panic/recover 捕获异常,保证程序继续运行。
- 尝试实现一个自定义错误类型,包含错误代码和消息。
5. 小结
-
error 是接口,所有错误都实现 Error() 方法。
- 错误处理推荐方式是 返回 error,而不是异常机制。
- panic/recover 用于极端情况,不是常规错误处理方式。