我想创建一个抽象函数,从数据库中获取数据并用这些数据填充数组。数组的类型可以不同。由于性能问题,我想在没有反射的情况下做到这一点。我只想在任何地方调用 GetDBItems() 之类的函数,并从 DB 中获取所需类型的数据数组。但是我创建的所有实现都是糟糕的。
这是这个函数的实现:
type AbstractArrayGetter func(size int) []interface{}
func GetItems(arrayGetter AbstractArrayGetter) {
res := DBResponse{}
DB.Get(&res)
arr := arrayGetter(len(res.Rows))
for i := 0; i < len(res.Rows); i++ {
json.Unmarshal(res.Rows[i].Value, &obj[i])
}
}
我在这里调用这个函数:
var events []Event
GetFullItems("events", "events_list", map[string]interface{}{}, func(size int) []interface{} {
events = make([]Event, size, size)
proxyEnt := make([]interface{}, size, size)
for i, _ := range events {
proxyEnt[i] = &events[i]
}
return proxyEnt
})
它可以工作,但是调用此函数的代码太多,而且将事件数组复制到接口数组也存在一些性能问题。
如何在没有反射的情况下使用简短的函数调用代码来做到这一点?还是反映在这种情况下不慢?