1 回答

TA貢獻1808條經驗 獲得超4個贊
您正在使用new,而不是make切片。這兩個是不同的。new為類型分配內存(在這種情況下,是切片,而不是切片的內容),而make創(chuàng)建該類型的實例(make([]User,0) 將創(chuàng)建用戶切片)。
您可以按如下方式進行這項工作:
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 關注
- 229 瀏覽
添加回答
舉報