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

我正在尝试在 Golang 中实现jquery 数据表服务器端处理。其中一部分需要一个通用方法来从数据库中选择数据。我已经发布了我在下面所做的事情的简化版本。


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() 不接受接口。在 golang 中是否有可能达到这种程度的通用性?感谢您是否可以指导我完成这项工作?


HUWWW
浏览 510回答 1
1回答

红颜莎娜

在这种情况下,结果已经是一个指针(users 作为 &users 传递),因此您不需要再次获取它的地址。替换行:_, err = dbMap.Select(&result, query)和_, err = dbMap.Select(result, query)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go