有没有办法在golang中使用package database/sql获取列的类型?

有没有办法在golang中使用package database/sql获取列的类型?,sql,reflection,go,Sql,Reflection,Go,基本上,在不知道查询的结果结构可能是什么的情况下,我想查询数据库,并返回如下结构(json-y) 有没有办法在golang中使用package database/sql获取列的类型 我怀疑我想做的是 将接口{}的数组设置为列()的大小 然后确定每列的类型 然后用指向该类型的指针填充数组 然后将数组传递给Scan() 这有点像中的代码示例,但是没有首先知道数据将填充的结构。使用数据库/sql?没有(据我所知) 但您可以将其用于任意查询。json包中的json.Marshall()将使用反射来确定打

基本上,在不知道查询的结果结构可能是什么的情况下,我想查询数据库,并返回如下结构(json-y)

有没有办法在golang中使用package database/sql获取列的类型

我怀疑我想做的是

  • 将接口{}的数组设置为列()的大小
  • 然后确定每列的类型
  • 然后用指向该类型的指针填充数组
  • 然后将数组传递给Scan()
  • 这有点像中的代码示例,但是没有首先知道数据将填充的结构。

    使用数据库/sql?没有(据我所知)

    但您可以将其用于任意查询。json包中的
    json.Marshall()
    将使用反射来确定打印值的正确方式,因此您可以使用如下结构:

    type Column struct {
        ColumnName  string
        ColumnValue interface{}
        ColumnType  string
    }
    

    然后使用
    reflect.TypeOf(someVariable).String()
    获取ColumnType的类型。

    您应该可以这样做:

    func printRows(rows *sql.Rows){
    
        colTypes, err := rows.ColumnTypes()
        for _,s := range colTypes {
          log.Println("cols type:", s.DatabaseTypeName());
        }
    }
    

    这可以通过扫描到一个空接口,然后在字段上进行类型切换来实现。查看(特定于JSON,但请查看“解码任意数据”一节)和。同时检查支持的类型。如果答案是好的,请接受thxwhat?
    cols,err:=rows.Columns()
    会给我们提供信息吗?怀疑吗?我接受了你的答案——这是我自己得出的答案。
    func printRows(rows *sql.Rows){
    
        colTypes, err := rows.ColumnTypes()
        for _,s := range colTypes {
          log.Println("cols type:", s.DatabaseTypeName());
        }
    }