beego中的判断数据库的查询结果是否为空,可以使用db查询返回结果中的err是否等于 orm.ErrNoRows?

这种是怎么实现的?

error类型比较应该是比较指针地址的,怎么可能有两个error一样呢?或许是error的新特性。

    err1 := errors.New(" error")
    err2 := errors.New(" error")
    fmt.Println(err1 == err2)

输出:false

果然不是error的新特性。那么ErrNoRows的相等是怎么实现的呢?

// C:/Users/Administrator/go/pkg/mod/github.com/astaxie/beego@v1.11.1/orm/orm.go:81
var ErrNoRows        = errors.New(" no row found")

或许是orm的查询结果直接返回全局变量-ErrNoRows。
就可以判断err是否等于ErrNoRows。那么这种错误的判断是如何实现的?

// C:/Users/Administrator/go/pkg/mod/github.com/astaxie/beego@v1.11.1/orm/orm_queryset.go:218
func (o *querySet) One(container interface{}, cols ...string) error {
    o.limit = 1
    num, err := o.orm.alias.DbBaser.ReadBatch(o.orm.db, o, o.mi, o.cond, container, o.orm.alias.TZ, cols)
    if err != nil {
        return err
    }
    if num == 0 {
        return ErrNoRows
    }

    if num > 1 {
        return ErrMultiRows
    }
    return nil
}

这里就是很明显的证据,返回了全局变量ErrNoRows。

文章来源于互联网:beego中判断sql查询错误是否等于ErrNoRows

发表评论