为了账号安全,请及时绑定邮箱和手机立即绑定

戈尔姆 查找结果到界面

戈尔姆 查找结果到界面

Go
UYOU 2022-10-04 16:41:11
我正在尝试使用 Gorm 为我的 api 构建一个通用的 Crud 存储库结构。我知道泛型在版本2中即将进入GoLang,但我试图使用反射或任何其他库来构建这个lib。在我的仓库中:func (repository *BaseRepository) find(result interface{}, pageSize int, page int) error {  if page < 1 {    return errors.ExceedsMinimumInt("page", "", 0, true, nil)  }  offset := (page - 1) * pageSize  ent := reflect.Zero(reflect.TypeOf(result))  repository.db = repository.db.Limit(pageSize).Offset(offset)  err := repository.db.Find(&ent).Error  result = ent  if err != nil {    return err  }  return nil}并调用此方法 sth,如下所示:func List(){  var entityList []MyEntity  find(entityList, 1, 10)}我认为,我无法将任何接口引用传递到Gorm.db.Find()方法有没有其他方法可以成功?
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

使用切片的指针作为自定义方法的输入参数。find


func (repository *BaseRepository) find(result interface{}, pageSize int, page int) error {

    if page < 1 {

      return errors.ExceedsMinimumInt("page", "", 0, true, nil)

    }


    if reflect.TypeOf(result).Kind() != reflect.Slice { 👈 check ❗️

        return errors.New("`result` is not a slice")

    }


    offset := (page - 1) * pageSize


    db = db.Limit(pageSize).Offset(offset)

    

    if err := db.Find(result).Error; err  != nil {

        return err

    }

    return nil

}

用法 👇🏻


var entityList []MyEntity

err := find(&entityList, 10, 1)

此外,您必须检查输入参数(),因为不适合查找单个支柱👇🏻(检索单个对象resultdb.Find)


如果要避免错误记录不发现错误,可以使用“查找类似数据库”。限制(1)。查找(&用户),查找方法同时接受结构和切片数据


例如(表为空):Book


b := Book{}

rowsAffectedQuantity := db.Find(&b).RowsAffected // 👈 0

err = db.Find(&b).Error // 👈 nil


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号