猿问

戈尔姆 查找结果到界面

我正在尝试使用 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()方法有没有其他方法可以成功?


UYOU
浏览 91回答 1
1回答

哈士奇WWW

使用切片的指针作为自定义方法的输入参数。findfunc (repository *BaseRepository) find(result interface{}, pageSize int, page int) error {&nbsp; &nbsp; if page < 1 {&nbsp; &nbsp; &nbsp; return errors.ExceedsMinimumInt("page", "", 0, true, nil)&nbsp; &nbsp; }&nbsp; &nbsp; if reflect.TypeOf(result).Kind() != reflect.Slice { 👈 check ❗️&nbsp; &nbsp; &nbsp; &nbsp; return errors.New("`result` is not a slice")&nbsp; &nbsp; }&nbsp; &nbsp; offset := (page - 1) * pageSize&nbsp; &nbsp; db = db.Limit(pageSize).Offset(offset)&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if err := db.Find(result).Error; err&nbsp; != nil {&nbsp; &nbsp; &nbsp; &nbsp; return err&nbsp; &nbsp; }&nbsp; &nbsp; return nil}用法 👇🏻var entityList []MyEntityerr := find(&entityList, 10, 1)此外,您必须检查输入参数(),因为不适合查找单个支柱👇🏻(检索单个对象resultdb.Find)如果要避免错误记录不发现错误,可以使用“查找类似数据库”。限制(1)。查找(&用户),查找方法同时接受结构和切片数据例如(表为空):Bookb := Book{}rowsAffectedQuantity := db.Find(&b).RowsAffected // 👈 0err = db.Find(&b).Error // 👈 nil
随时随地看视频慕课网APP

相关分类

Go
我要回答