有没有一种方法可以在golang中使用包数据库/sql获取列的类型



基本上,在不知道查询的结果结构的情况下,我想查询数据库,并返回这样的结构(json-y)

// Rows
[
   // Row 1
   [
      { ColumnName: "id", Value: 1, Type: int },
      { ColumnName: "name", Value: "batman", Type: string },
      ...
   ],
   // Row 2
   [
      { ColumnName: "id", Value: 2, Type: int },
      { ColumnName: "name", Value: "superman", Type: string },
      ...
   ]
]

有没有一种方法可以在golang中使用包数据库/sql获取列的类型?

我怀疑我想做的是

  1. 使接口{}的数组大小为Column()
  2. 则对于每一列确定其类型
  3. 然后用指向该类型的指针填充数组
  4. 然后将数组传递给Scan()

这有点像sqlx中的这个代码示例,但不首先知道数据将被填充的Struct。

您应该可以这样做:

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新