gorm查询结构体不确定,如何动态传递结构体?

有一个需求,用户配置查询sql,查询结果入库表名,根据这个需求我创建了入库表结构体,查询func、但是golang的方法参数必须指定类型,入库表类型我是不能确定的。这种需求大家怎么处理的?

相关代码

//report_data_1 入库表结构体1
type ReportData1 struct {
    Id int64 `json:"id"`
    Date string `json:"date"`
    Impressions int64 `json:"impressions"`
    Click     int64     `json:"click"`
}

//report_data2  入库表结构2
type ReportData2 struct {
    Id int64 `json:"id"`
    Date string `json:"date"`
    Impressions int64 `json:"impressions"`
    Click     int64     `json:"click"`
}
//伪代码 但是这里必须制定一个表结构?我的结构不确定
func request(tableStruct ReportData1){
  gorm.Where().Find(&tableStruct)
}

request 方法需要查询N种表结构,查询完毕的数据会有其他方法接收查询数据进行入库。
我试过传递interface{}方式,但是到了request方法内部还是要转成struct结构进行查询,这样的话,其他方法里面还需要再写相同的代码判断是哪种结构体。

写的可能有点绕,不知道大家理解了吗0 _ 0

阅读 8k
2 个回答

楼上说的对,将 request 方法中的 tableStruct 参数的类型修改为 interface{} 即可。我改一下你的代码,如下:

func request(tableStruct interface{}){
  gorm.Where().Find(tableStruct)
}

使用的时候,只要向下面这样就好了。

d1 := &ReportData1{}
request(d1)

或者

d2 := &ReportData2{}
request(d2)

你可以试一下。

先定义一个interface, 然后再用struct 实现这个interface。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏