1 回答

TA貢獻1796條經(jīng)驗 獲得超10個贊
問題中的代碼將結(jié)構(gòu)傳遞docs給需要切片的函數(shù)。傳遞切片字段的地址而docs不是docs其本身。
該createQuery函數(shù)可以從切片本身確定切片元素類型。無需傳遞示例值。
var docs entities.Projects
createQuery(&docs.Projects, collection)
for _, doc := range docs.Projects {
fmt.Println(doc.Title)
}
調(diào)用cur.Decode需要一個指向未初始化值的指針。使用reflect.New 來創(chuàng)建該值。
func createQuery(docs interface{}, c *mongo.Collection) {
docsv := reflect.ValueOf(docs).Elem()
doct := docsv.Type().Elem()
cur, err := c.Find(context.Background(), bson.D{{}})
if err != nil {
log.Fatal(err)
}
for cur.Next(context.Background()) {
docpv := reflect.New(doct)
err = cur.Decode(docpv.Interface())
if err != nil {
log.Fatal(err)
}
docsv.Set(reflect.Append(docsv, docpv.Elem()))
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
cur.Close(context.Background())
}
順便說一句,entities.Projects如果該結(jié)構(gòu)類型只有一個字段,則不需要該結(jié)構(gòu)類型。改用[]Project:
var docs []entities.Project
createQuery(&docs, collection)
for _, doc := range docs {
fmt.Println(doc.Title)
}
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報