1 回答
TA贡献1827条经验 获得超8个赞
假设您正在使用sqlx添加另一个反射层是没有意义的,而是使用它,因为它是被设计用来使用的。
func (pdb *PersistentDb) GetGeneric(ctx context.Context, sqlStmt string, model interface{}, args ...interface{}) error {
if pdb == nil {
return fmt.Errorf("you need to initilize persistent db first")
}
db, err := pdb.connectx(ctx)
if err != nil {
callistolog.Errorf("Failed connect to database error: %v", err)
return err
}
defer db.Close()
stmt, errPrepare := db.Preparex(sqlStmt)
if errPrepare != nil {
callistolog.Errorf("Failed prepare sql statement error: %v", errPrepare)
return errPrepare
}
defer stmt.Close()
if err := stmt.Get(model, args...)
callistolog.Error(err)
return err
}
return nil
}
role := models.Role{}
if err := pdb.GetGeneric(ctx, "select ...", &role, args...); err != nil {
return err
}
fmt.Println(role)
// ...
tentants := models.Tenants{}
if err := pdb.GetGeneric(ctx, "select ...", &tenants, args...); err != nil {
return err
}
fmt.Println(tentants)
请注意,如果您不打算重用语句,则无需手动准备语句。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报