数据库 – 如何使用反射调用Golang中的扫描变量函数?
发布时间:2020-12-12 06:57:23 所属栏目:MsSql教程 来源:网络整理
导读:我正在寻找使用反射来调用 Rows.Scan()功能。然而,它需要一个可变数量的指针,但我是新来的戈兰,没有很多源代码示例。我需要使用反思,因为我打算使用Query调用的值填充一个切片。所以基本上使用rows.Columns()获取行的长度,然后make()一个[] interface {}
我正在寻找使用反射来调用
Rows.Scan()功能。然而,它需要一个可变数量的指针,但我是新来的戈兰,没有很多源代码示例。我需要使用反思,因为我打算使用Query调用的值填充一个切片。所以基本上使用rows.Columns()获取行的长度,然后make()一个[] interface {}的片段填充通常使用传递给Scan()函数的指针来填充的数据点。
基本上这样的代码: col := rows.Columns() vals := make([]interface{},len(cols)) rows.Scan(&vals) 任何人都有一个例子,调用一个可以使用反射的指针的可变函数,我可以看一下? 编辑: package main import ( _ "github.com/lib/pq" "database/sql" "fmt" ) func main() { db,_ := sql.Open( "postgres","user=postgres dbname=Go_Testing password=ssap sslmode=disable") rows,_ := db.Query("SELECT * FROM _users;") cols,_ := rows.Columns() for rows.Next() { data := make([]interface{},len(cols)) rows.Scan(data...) fmt.Println(data) } } 结果: [<nil> <nil> <nil> <nil> <nil>] [<nil> <nil> <nil> <nil> <nil>] [<nil> <nil> <nil> <nil> <nil>] [<nil> <nil> <nil> <nil> <nil>] [<nil> <nil> <nil> <nil> <nil>] [<nil> <nil> <nil> <nil> <nil>] 解决方法这是我到达的解决方案。它在遍历数据之前没有得到类型,所以在通过Scan()方法拉出值之前,手头不知道每个值的类型,但是实际上并不需要先了解类型。诀窍是创建2个片段,一个用于值,一个保存与值片段并行的指针。然后一旦指针用于填充数据,则值数组实际上用数据填充,然后可以用它来填充其他数据结构。 package main import ( "fmt" _ "github.com/lib/pq" "database/sql" ) func main() { db,"user=postgres dbname=go_testing password=pass sslmode=disable") rows,_ := db.Query("SELECT * FROM _user;") columns,_ := rows.Columns() count := len(columns) values := make([]interface{},count) valuePtrs := make([]interface{},count) for rows.Next() { for i,_ := range columns { valuePtrs[i] = &values[i] } rows.Scan(valuePtrs...) for i,col := range columns { var v interface{} val := values[i] b,ok := val.([]byte) if (ok) { v = string(b) } else { v = val } fmt.Println(col,v) } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 防止SQL Server中的缓存
- 数据库管理 – 如何使用Squirrel SQL列出数据库中的所有表?
- sql – 从图像到Varbinary(最大)
- MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is de
- sqlserver存储过程中SELECT 与 SET 对变量赋值的区别
- 为现有数据库开发Java CRUD的最佳框架是什么?
- .Mdf文件如何导入到SqlServer数据库【转】
- sql-server – 更新表sql server中的前1条记录[重复]
- MySQL中主键索引与聚焦索引之概念的学习教程
- sqlserver数据库的sql语句使用