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

luc*_*iet 4 sql reflection go

基本上,在事先不知道查询的结果结构可能是什么的情况下,我想查询数据库,并返回这样的结构(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 },
      ...
   ]
]
Run Code Online (Sandbox Code Playgroud)

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

我怀疑我想做的是

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

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

小智 6

你应该能够这样做:

func printRows(rows *sql.Rows){

    colTypes, err := rows.ColumnTypes()
    for _,s := range colTypes {
      log.Println("cols type:", s.DatabaseTypeName());
    }
}
Run Code Online (Sandbox Code Playgroud)