自定义错误类型时应该注意的 nil !=nil
看代码:
//自定义错误类型
type myError struct {
msg string
}
//实现错误接口,即为错误
func (mye *myError) Error() string {
return mye.msg
}
//自定义工厂类
//func NewMyError(checkFlag int) (err error) { //接口类型error定义返回值,接收时也是接口类型
func NewMyError(checkFlag int) (err *myError) {
//err *myError 这样定义返回值,在返回nil时,且用接口类型 error接收时
// 判断 err != nil 时永远为true。因为接口类型(有值又有类型) error接收时,值为nil,但是类型T不为nil为myError,故不为nil。同时为nil时才时nil
if checkFlag == 1 {
return nil
}
err = &myError{"自定义错误!"}
return
}
func main() {
var err error //用接口类型 error接收
err = NewMyError(1)
if err != nil {
fmt.Println("不为nil!!")
fmt.Printf("%v\n",err)
} else {
fmt.Println("为nil!!")
}
}
看看打印结果:
故:这种定义 ,一定要【返回值定义】和【接收类型】对应。不能定义返回值时用【本身结构体类型定义】,接收时用【接口类型定义】。需返回值定义什么,接受对应什么。ps:学废了!!!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: