第 26 章:Error Handling(错误处理)

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. 练习任务

  1. 写函数 openFile(filename string),当文件不存在时返回错误。
  2. 使用 panic/recover 捕获异常,保证程序继续运行。
  3. 尝试实现一个自定义错误类型,包含错误代码和消息。

5. 小结

  • error 是接口,所有错误都实现 Error() 方法。
  • 错误处理推荐方式是 返回 error,而不是异常机制。
  • panic/recover 用于极端情况,不是常规错误处理方式。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容