有没有办法在golang中使用package database/sql获取列的类型?
基本上,在不知道查询的结果结构可能是什么的情况下,我想查询数据库,并返回如下结构(json-y) 有没有办法在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.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());
}
}