gpt4 book ai didi

reflection - 在 Go 中使用反射创建指针 slice

转载 作者:IT王子 更新时间:2023-10-29 01:59:15 26 4
gpt4 key购买 nike

我看过几个关于这个主题的反射(reflection)示例,但我找不到任何解决这个问题的方法。感觉有点令人费解,但替代方案是大量重复,所以我想我会试一试。

我有一个返回函数(处理程序)的函数。包装函数传入结构的实例。我需要内部函数来创建指向该结构类型的指针片段:

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
}
}

最佳答案

您可以使用 reflect 和类型示例创建一个 slice ,如下所示:

var t *MyType

typeOfT := reflect.TypeOf(t)
sliceOfT := reflect.SliceOf(typeOfT)

s := reflect.MakeSlice(sliceOfT, 0, 0).Interface()

为了在不知道类型的情况下将指针传递给 slice ,可以先创建指针,然后设置 slice 值:

ptr := reflect.New(sliceOfT)
ptr.Elem().Set(reflect.MakeSlice(sliceOfT, 0, 0))
s := ptr.Interface()

http://play.golang.org/p/zGSqe45E60

关于reflection - 在 Go 中使用反射创建指针 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com