高朗Gorm动态目标结构

我想写一个函数来检索数据库中的一条记录,其内容为 GORM 其中目标结构是动态的。类似这样。

type User struct {
  ID    uint
  Email string
}

type BigUser struct {
  ID       uint
  Username string
  Role     string
}

func GetRecord(db *gorm.DB, u SomeUserInterfaceTypeOrSomething) {
  db.Find(&u)
}

GetRecord(db, User{})
GetRecord(db, BigUser{})

所以如果我传递一个 User 结构变量,我只得到ID和电子邮件,如果我传递一个 BigUser 结构变量,我得到所有的数据库字段(例如)。

我需要这个是因为 GetRecord 将在一个库中,我希望使用该库的人可以通过一个自定义结构来只检索他想要的字段。

我不知道如何实现这个目标,有什么建议或最佳实践吗?我是Golang的新手 😀

解决方案:

传递一个指向接口的指针几乎总是错误的,甚至总是错误的。也就是说,传递给函数的参数应该是一个指针。考虑到这一点,你可以使用同样的方法,即 json.Unamrshal(*gorm.DB).Find 的使用,即接受一个空的接口,并将结果解码成该接口。并用文档告知用户,传入的值为 必须 是一个非nil指针,否则代码将失败。

func GetRecord(db *gorm.DB, u interface{}) {
    db.Find(u) // u must already be a pointer, therefore don't do &u here
}

var u User{}
GetRecord(db, &u) // pass a pointer here

bu := new(BigUser) // new returns a pointer
GetRecord(db, bu) // bu is a pointer already, no need for &bu here

给TA打赏
共{{data.count}}人
人已打赏
未分类

在python中,我应该添加什么来从我的(文本文件)或我的(xml文件)中获取URLs,其中包括URLs列表?

2022-9-8 21:16:38

未分类

如何在循环中删除一个列表中的元素?

2022-9-8 21:16:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索