1 回答
TA贡献1808条经验 获得超4个赞
您正在使用new,而不是make切片。这两个是不同的。new为类型分配内存(在这种情况下,是切片,而不是切片的内容),而make创建该类型的实例(make([]User,0) 将创建用户切片)。
您可以按如下方式进行这项工作:
collection:=make([]generic,0)
switch dbName {
case "users":
model = new(User)
case "pets":
model = new(Pet)
case "groups":
model = new(Group)
default:
return nil
}
而且您model已经是一个指针,并且您希望将数据存储在该指针指向的位置:
entry.ToStruct(model) // Not &model
您正在返回一个interface{},而不是您可以 return []generic,这使您免于使用一种类型断言来获取值的数组部分。但这就是你的问题开始的时候,因为 Go 中没有泛型,你必须编写许多类型断言来获取你需要的数据。
有几种方法可以做到这一点。一种方法是收集数据的回调函数:
func FetchDB(dbName string, collector func(entry Entry) {
iter := client.DB(dbName).Get()
for {
entry, err := iter.Next()
collector(entry)
}
}
并将其称为:
users:=make([]User,0)
FetchDB("users",func(entry Entry) {
var u User
entry.ToStruct(&u)
users=append(users,u)
})
- 1 回答
- 0 关注
- 203 浏览
添加回答
举报