文章目录
- 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).