package mongodb type iter struct { done, closed bool iter *mgo.Iter result func() interface{} } func (i *iter) Next() (interface{}, bool, error) { if !i.done { // Get a new instance. r := i.result() // Get the next value and return it. i.done = !(i.iter.Next(r)) return r, i.done, nil } if !i.closed { i.closed = true if err := i.iter.Close(); err != nil { return nil, true, err } } return nil, true, nil }