1 回答
TA贡献1790条经验 获得超9个赞
有很多方法可以做到这一点。其中之一是使用回调函数:
func Process(cursor *mongo.Cursor, cb func(), out interface{}) {
for cursor.Next(context.Background()) {
err := cursor.Decode(out)
if err != nil {
log.Fatal(err)
}
cb()
log.Printf("%#v\n", obj)
}
}
然后定义一个映射:
type collHandler struct {
New func() interface{}
Process func(interface{})
}
var collections=map[string]func() interface{} {
"announcements": collHandler{
New: func() interface {} {return &Announcement{}},
Process: func(data interface{}) {
processAnnouncements(data.(*Announcement))
},
},
...
}
然后,您可以:
handler:=collections[collectionName]
obj:=handler.New()
process(cursor,func() {
handler.Process(obj)
},
&obj)
这样,您可以将迭代放入公共函数中,并使用闭包来处理特定于类型的逻辑。
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报