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

标签 generics go datatables gorp

我正在尝试实现 jquery datatables server side processing在 golang 。其中一部分需要一种通用方法来从数据库中选择数据。我已经发布了我在下面所做的简化版本。

package main
import (
    "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() 不接受接口(interface)。有没有可能在golang中达到这种通用性?能否指导我完成这项工作,不胜感激?

最佳答案

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

替换行:

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

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

关于generics - Golang通用方法从数据库中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664997/

相关文章:

c# - 定义此通用接口(interface)以便编译的最干净的方法是什么?

c# - 如何将类型化值转换为通用类型 T?

go - 带有可选 bool 值的未命名字符串的 YAML 列表

windows - 在 Go 中将窗口刻度转换为 UNIX 时间戳

jquery - 多个数据表可以从同一个url获取数据吗?

java - 为什么编译时没有任何未经检查的类型警告?

java - 为什么通配符类型参数不在自引用类型的包装器的范围内

go - 使用 Go 删除​​链接列表中的项目

css - 在数据表 : 中换行标题文本

javascript - 修改单元格值后列搜索失败