基本上,如果不事先知道查询的结果可能是什么,我想查询数据库,并返回这样的结构(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中使用package database / sql获取列的类型?
我怀疑我想做的是
这有点像sqlx中的代码示例,但没有首先知道数据将填充的结构。
答案 0 :(得分:2)
您应该可以这样做:
func printRows(rows *sql.Rows){
colTypes, err := rows.ColumnTypes()
for _,s := range colTypes {
log.Println("cols type:", s.DatabaseTypeName());
}
}
答案 1 :(得分:0)
使用database / sql?不(据我所知)。
但您可以使用this code进行任意查询。来自json包的json.Marshall()
将使用反射来确定打印值的正确方法,因此您可以使用这样的结构:
type Column struct {
ColumnName string
ColumnValue interface{}
ColumnType string
}
然后使用reflect.TypeOf(someVariable).String()
获取ColumnType的类型。