golang在反思中迷失了

时间:2016-07-18 17:18:58

标签: go reflection

我正在用go lang抽象一个rest API,但我完全陷入了反射部分。

    log.Printf("handleIndex resourceType = %v", res.resourceType)

slice := reflect.MakeSlice(reflect.SliceOf(res.resourceType), 0, 0)
err := res.api.DB.Select(&slice, "SELECT * FROM domains")
if err != nil {
    log.Printf("SQL Error %s", err)
}
fmt.Printf("\n=================================== \n%#v \n=================================== ", slice)

resourceType是模型的reflect.Type

res.api.DB是sqlx.DB

代码输出为:

handleIndex resourceType = main.Domain

SQL错误预期切片但得到结构

[] main.Domain {}

所以基本上我甚至做了一片reflect.Type我有一个结构 我错过了什么?

1 个答案:

答案 0 :(得分:2)

您将指向reflect.Value的指针传递到Select来电。 reflect.Value是一个结构,这就是您收到此错误的原因。

而是使用reflect.New

创建所需类型的新指针
slice := reflect.New(reflect.SliceOf(res.resourceType))
err := res.api.DB.Select(slice.Interface(), "SELECT * FROM domains")