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

GORM:通用方式的crud操作符

GORM:通用方式的crud操作符

Go
眼眸繁星 2022-05-23 15:35:15
我尝试制作一个 Go DAL,为此我主要使用 GORM。现在我试图让我的 DAL 尽可能抽象,以便能够查询许多表。问题是我必须为每个表结构重复自己 - 我的数据库的反射。让我们举个例子:这是两个结构,一个用于我数据库中的每个表:type Cad_check_status struct {    Id int    Status_code int    Last_update Timestamp    Path string    Ref_num int    System_code int}type Cad_check_errors struct {    Id int    check_status int    error_code Timestamp}这里是它们各自的检索函数(每个函数一个,即使它们完全一样,除了结构实例化是这里的主要问题):func StatusRetrieve(db *CDb, keyval map[string]interface{}) ([]byte, error){    atts :=  []Cad_check_status{} // <===== this is my problem, the only difference between the two functions    errors := db.Where(keyval).Find(&atts).GetErrors()    err := HandleDBErrors(errors)    if err != nil {        return nil, err    }    b, _ := json.Marshal(atts)    return b, nil  }func ErrorsRetrieve(db *CDb, keyval map[string]interface{}) ([]byte, error){    atts :=  []Cad_check_errors{} // <=== my problem again, the rest is the same    errors := db.Where(keyval).Find(&atts).GetErrors()    err := HandleDBErrors(errors)    if err != nil {        return nil, err    }    b, _ := json.Marshal(atts)    return b, nil}到目前为止,我试图做这样的事情:func Retrieve (tableStruct interface{}, db *CDb, keyval map[string]interface{})([]byte, error) {    atts :=  []tableStruct{} //<=== but of course this is IMPOSSIBLE ! but you got the idea....    errors := db.Where(keyval).Find(&atts).GetErrors()    err := HandleDBErrors(errors)    if err != nil {        return nil, err    }    b, _ := json.Marshal(atts)    return b, nil}
查看完整描述

1 回答

?
潇湘沐

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

实际上,如果您正确使用它,您的最后一个示例就可以正常工作:


func Retrieve (atts interface{}, db *CDb, keyval map[string]interface{})([]byte, error) {

    errors := db.Where(keyval).Find(atts).GetErrors()

    err := HandleDBErrors(errors)

    if err != nil {

        return nil, err

    }

    b, _ := json.Marshal(atts)

    return b, nil

}


var values []Cad_check_status

json,err := Retrieve(&values, db, keyval)


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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