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

Golang从数据库中获取数据的通用方法

Golang从数据库中获取数据的通用方法

Go
HUWWW 2021-12-20 10:09:02
我正在尝试在 Golang 中实现jquery 数据表服务器端处理。其中一部分需要一个通用方法来从数据库中选择数据。我已经发布了我在下面所做的事情的简化版本。package mainimport (    "gopkg.in/gorp.v1"    "database/sql"  _ "github.com/go-sql-driver/mysql")type User struct {    TenantId     int     `db:"tenantid"json:"tenantid"`    Username     string  `db:"username"json:"username"`    Password     string  `json:"password"`}func GenericSelect(database string,  table string, columns []string, result interface{})interface{} {    dbMap := getDBConnection(database);    defer dbMap.Db.Close()    var err error    query := "SELECT "     for index,element := range columns {      query += element      if(index+1 != len(columns)){        query += ","      }    }    query +=  " FROM " + table + " LIMIT 1,100"    _, err = dbMap.Select(&result, query)    if err != nil {        panic(err.Error())  // Just for example purpose.    }  return result}func getDBConnection(dbname string) *gorp.DbMap {    var connectionUrl string    connectionUrl = "root:root@tcp(localhost:3306)/" + dbname    db, err := sql.Open("mysql", connectionUrl)    if err != nil {        panic(err.Error())  // Just for example purpose.    }    dbmap := &gorp.DbMap{Db: db, Dialect:gorp.MySQLDialect{"InnoDB", "UTF8"}}    return dbmap}func main(){        var users []User        columns := []string{"tenantid", "username", "password"}        result := GenericSelect("portal","accounting",columns, &users)        //make result in to a json instead of print        print(result)}一旦我运行它,它会抛出以下错误,panic: gorp: Cannot SELECT into this type: *interface {}goroutine 1 [running]:main.GenericSelect(0x6b1c30, 0x6, 0x6bd490, 0xa, 0xc208073f60, 0x3, 0x3, 0x5e8e60, 0xc20801e260, 0x0, ...)    /home/anuruddha/Desktop/go-lang/main.go:30 +0x37f根据错误, Select() 不接受接口。在 golang 中是否有可能达到这种程度的通用性?感谢您是否可以指导我完成这项工作?
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超13个赞

在这种情况下,结果已经是一个指针(users 作为 &users 传递),因此您不需要再次获取它的地址。


替换行:


_, err = dbMap.Select(&result, query)


_, err = dbMap.Select(result, query)


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 509 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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