赞
踩
内建error接口
// builtin.go
type error interface {
Error() string
}
实现error接口
// errors.go
package errors
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
定义
// package errors
func New(text string) error {}
// package fmt
func Errorf(format string, a ...any) error {}
代码示例
package main import ( "errors" "fmt" ) func main() { // 方式一:通过字符串构建 error err := errors.New("error") fmt.Printf("err: %v\n", err) // err: error // 方式二:格式化输出错误字符串 fmtErr := fmt.Errorf("this is a error: %s", "fmt error") fmt.Printf("fmtErr: %v\n", fmtErr) // fmtErr: this is a error: fmt error }
package main import ( "errors" "fmt" ) // 自定义错误 var DBError = errors.New("DBError") func getRecords() (any, error) { // 抛出错误 return nil, DBError } func main() { // 错误处理 _, err := getRecords() if err != nil { fmt.Printf("err: %v\n", err) } else { fmt.Printf("not err") } // err: DBError }
package main import ( "errors" "fmt" ) // 自定义错误 var DBError = errors.New("DBError") // 错误包裹 var NotFoundError = fmt.Errorf("%w", DBError) func getRecords() (any, error) { return nil, NotFoundError } func main() { // 错误处理 _, err := getRecords() if err != nil { if errors.Is(err, DBError) { fmt.Println("err Is DBError") } if errors.Is(err, NotFoundError) { fmt.Println("err Is NotFoundError") } } else { fmt.Printf("not err") } // err Is DBError // err Is NotFoundError }
package main import ( "errors" "fmt" ) // 自定义错误 type DBError struct { desc string } func (dbError DBError) Error() string { return dbError.desc } func getRecords() (any, error) { return nil, DBError{ desc: "DBError", } } func main() { // 错误处理 _, err := getRecords() if err != nil { var dbError DBError if errors.Is(err, dbError) { fmt.Println("err Is DBError") } if errors.As(err, &dbError) { fmt.Println("err As NotFoundError") } } else { fmt.Printf("not err") } // err As NotFoundError }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。