我已经看过几个关于这个主题的反思的例子,但我找不到解决这个问题的任何东西。感觉有点复杂,但另一种选择是大量的重复,所以我想我会尝试一下。
我有一个返回函数(处理程序)的函数。包装函数传入struct的实例。我需要内部函数来创建一个指向该结构类型的指针:
func createCollectionHandler(app *appSession, record interface{}, name string) func(res http.ResponseWriter, req *http.Request) {
return func(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "application/json")
// This line needs to be dynamic:
var result []*Person
err := meddler.QueryAll(app.MysqlDB, &result, "select * from "+name)
if err != nil {
log.Fatal(err)
}
json, err := json.MarshalIndent(result, "", " ")
if err != nil {
log.Println(err)
}
res.Write([]byte(json))
return
}
}
答案 0 :(得分:2)
您可以使用reflect和类型示例创建切片,如下所示:
var t *MyType
typeOfT := reflect.TypeOf(t)
sliceOfT := reflect.SliceOf(typeOfT)
s := reflect.MakeSlice(sliceOfT, 0, 0).Interface()
为了在不知道类型的情况下将指针传递给切片,您可以先创建指针,然后设置切片值:
ptr := reflect.New(sliceOfT)
ptr.Elem().Set(reflect.MakeSlice(sliceOfT, 0, 0))
s := ptr.Interface()