自定义错误类型时应该注意的 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 协议》,转载必须注明作者和本文链接
一切皆自学
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!