我们经常会看到golang,标准库中的方法,都返回两个值,其中一个是error类型的。这就是golang错误处理的简洁逻辑。例如:
func Open(name string) (*File, error) {
return OpenFile(name, O_RDONLY, 0)
}
os.Open("a.txt")
// error接口 builtin.go
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(fmt.Sprintf(…))。
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