beego中的判断数据库的查询结果是否为空,可以使用db查询返回结果中的err是否等于 orm.ErrNoRows?
这种是怎么实现的?
error类型比较应该是比较指针地址的,怎么可能有两个error一样呢?或许是error的新特性。
err1 := errors.New("<hello> error")
err2 := errors.New("<hello> 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("<QuerySeter> 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。