Go语言学习笔记——错误处理

时间:2024-10-11 07:50:20

文章目录

  • Golang错误处理
    • Golang 错误处理源码分析
      • **接口 **
      • ****
    • 实例演示
      • 返回error
      • 返回error错误拼接
    • 自定义error
      • 方式一:
      • 方式二:自定义struct
      • 拆开一个被包装的错误
      • 判断被包装的error是否是包含指定错误
      • 提取指定类型的错误


Golang错误处理

我们经常会看到golang,标准库中的方法,都返回两个值,其中一个是error类型的。这就是golang错误处理的简洁逻辑。例如:

func Open(name string) (*File, error) {
   
	return OpenFile(name, O_RDONLY, 0)
}

os.Open("")

Golang 错误处理源码分析

接口

// error接口 
type error interface {
   
	Error() string
}

package errors

// New returns an error that formats as the given text.
// Each call to New returns a distinct error value even if the text is identical.
func New(text string) error {
   
	return &errorString{
   text}
}

// errorString is a trivial implementation of error.
type errorString struct {
   
	s string
}

func (e *errorString) Error() string {
   
	return e.s
}

func New(text string) error

使用字符串创建一个错误,请类比fmt包的Errorf方法,差不多可以认为是New((…))。

package errors

import (
	"internal/reflectlite"
)

// 拆开一个被封装的错误error
func Unwrap(err error) error {
   
	u, ok := err.(interface {
   
		Unwrap() error
	})
	if !ok {
   
		return nil
	}
	return u.Unwrap()
}

// 判断被包装的error是否是包含指定错误
func Is(err, target error) bool {
   
	if target == nil {
   
		return err == target
	}

	isComparable := reflectlite.TypeOf(target).