Go语言---error处理

文章目录

  • error基础
  • 创建error
    • 1、使用errors包创建简单错误:
    • 2、使用fmt.Errorf创建格式化错误:
  • 检查error
  • 自定义error类型
  • 错误处理模式
    • 1、直接返回错误
    • 2、包装错误

在Go语言中,error是一个内置的接口类型,用于表示错误条件。它是Go语言中错误处理的核心机制。

error基础

error接口定义非常简单:

type error interface {
    Error() string
}

任何实现了Error() string方法的类型都可以作为error使用。

创建error

1、使用errors包创建简单错误:

import "errors"

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

2、使用fmt.Errorf创建格式化错误:

func processFile(filename string) error {
    if len(filename) == 0 {
        return fmt.Errorf("filename cannot be empty")
    }
    // 处理文件...
    return nil
}

检查error

Go语言中通常通过返回值来检查错误:

result, err := divide(10, 0)
if err != nil {
    fmt.Println("Error:", err)
    // 处理错误
} else {
    fmt.Println("Result:", result)
}

自定义error类型

可以创建自定义error类型来携带更多信息:
这一段如果看不懂建议使用al解析一下子。

type MyError struct {
    Code    int
    Message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("Error %d: %s", e.Code, e.Message)
}

func someFunction() error {
    return &MyError{Code: 404, Message: "Not Found"}
}

错误处理模式

1、直接返回错误

func readFile(path string) ([]byte, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return nil, err  // 直接将错误返回给调用者
    }
    return data, nil
}

2、包装错误

import "errors"

func process() error {
    if err := doSomething(); err != nil {
        return fmt.Errorf("process failed: %w", err)  // 使用%w包装错误
    }
    return nil
}

func main() {
    err := process()
    if errors.Is(err, io.EOF) {  // 检查特定错误
        fmt.Println("EOF error occurred")
    }
    
    var pathError *os.PathError
    if errors.As(err, &pathError) {  // 提取特定错误类型
        fmt.Println("Failed at path:", pathError.Path)
    }
}

你可能感兴趣的:(GO语言学习笔记,golang,ios,开发语言)