Golang中的error类型
原文:https://studygolang.com/articles/4389 error类型本身就是一个预定义好的接口,里面定义了一个method type error interface { Error() string }
生成一个新的error并返回 一般有以下几种处理方式: package main
import (
"errors"
"fmt"
)
type Customerror struct {
infoa string
infob string
Err error
}
func (cerr Customerror) Error() string {
errorinfo := fmt.Sprintf("infoa : %s,infob : %s,original err info : %s ",cerr.infoa,cerr.infob,cerr.Err.Error())
return errorinfo
}
func main() {
//方法一:
//采用errors包的New方法 返回一个err的类型
var err error = errors.New("this is a new error")
//由于已经实现了error接口的方法 因此可以直接调用对应的方法
fmt.Println(err.Error())
//方法二:
//采用fmt.Errof 将string信息转化为error信息 并返回
err = fmt.Errorf("%s","the error test for fmt.Errorf")
fmt.Println(err.Error())
//方法三:
//采用自定义的方式实现一个error的 一个duck 类型
err = &Customerror{
infoa: "err info a",infob: "err info b",Err: errors.New("test custom err"),}
fmt.Println(err.Error())
}
/*output: // Package errors implements functions to manipulate errors.
package errors
// New returns an error that formats as the given text.
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
}
采用fmt.Errorf方法把string类型转化为error类型,在这个方法的内部,先调用fmt包中的Sprintf方法把格式化的输入转化为字符串,在使用 errors.New 方法返回error类型。 采用自定义的error类型可以先判断err的动态类型,再进行下一层的判断。 //io.EOF
var EOF = errors.New("EOF")
//net.Error
type Error interface {
error
Timeout() bool // Is the error a timeout?
Temporary() bool // Is the error temporary?
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |