我想使用反射调用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>]
这是我到达的解决方案。它在遍历数据之前没有获得Types,因此在将值拉出之前不事先知道每个值的类型Scan()
,但真正的重点是不必事先知道类型。
诀窍是创建2个切片,一个切片用于值,另一个切片使指针平行于值切片。然后,一旦使用了指针填充数据,值数组实际上就会被数据填充,然后可用于填充其他数据结构。
package main
import (
"fmt"
_ "github.com/lib/pq"
"database/sql"
)
func main() {
db, _ := sql.Open(
"postgres",
"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 {
val := values[i]
b, ok := val.([]byte)
var v interface{}
if (ok) {
v = string(b)
} else {
v = val
}
fmt.Println(col, v)
}
}
}
问题内容: 简单的问题,如何使此代码起作用? 输出: 问题答案: 作品。问题在于仅搜索方法。从javadoc: 返回一个Method对象,该对象反映此Class对象表示的类或接口的指定公共成员方法。 更新: 成功获取方法后,可以使用以下方法调用它: 即- 用一个元素创建一个新数组-该数组。使用变量名,它看起来像:
问题内容: 我正在尝试使用java反射调用带有可变参数的方法。这是托管方法的类: 这是调用代码: 我在调用invoke的最后一行以“错误数量的参数” 的形式获取IllegalArgumentException 。不知道我在做什么 错。 任何指针将不胜感激。 谢谢 问题答案: public class Test { 为我工作。 将您的N []投射到对象 在实例上调用,而不在类上调用
如果反射值对象(reflect.Value)中值的类型为函数时,可以通过 reflect.Value 调用该函数。使用反射调用函数时,需要将参数使用反射值对象的切片 []reflect.Value 构造后传入 Call() 方法中,调用完成时,函数的返回值通过 []reflect.Value 返回。 下面的代码声明一个加法函数,传入两个整型值,返回两个整型值的和。将函数保存到反射值对象(refle
我有一个内联变量函数内联int foo(…) 我需要调用一个宏(我们称它为宏),它也是可变的 基本上,我需要将其所有输入参数传递给宏。由于使用了选项,将重新定义为另一个宏将是一个简单的解决方案,但我还需要来返回值<注意:我正在尝试连接已编写代码的两部分,不允许更改它们<代码>foo(…) 用于代码的第一部分,宏定义于第二部分。我要做的唯一一件事就是定义一个使用宏的foo(),我不能,因为它们都是可
本文向大家介绍Swift如何调用Objective-C的可变参数函数详解,包括了Swift如何调用Objective-C的可变参数函数详解的使用技巧和注意事项,需要的朋友参考一下 前言 这个问题是一个朋友问我怎么写,一开始我是拒绝的。我想这种东西网上随便 google 下不就有了吗。他说,查了,但没大看明白。于是我就查了下,没想到这个写法确实有点诡异,我第一反应也没看明白。所以随便水一篇文章,强行
我有以下代码: 我要复制的类: 创建一些类 公共对象createObj(String cls\u name,String param1,int param2){返回Class.forName(cls\u name)。getConstructor(String.Class,Integer.Class)。newInstance(param1,param2);} 然后我尝试使用以下内容复制该类的对象: