不同的结构类型切片作为在 go 中起作用的参数

我一直在尝试概括以下代码以避免冗余代码重复。


    func (db *MongoController) extractManyByIDFromDB(dbName string, collectionName string, pResults interface{}, limit int64) (int, error) {

         collection := db.client.Database(dbName).Collection(collectionName)

    

        findOptions := options.Find()

        findOptions.SetLimit(limit)


        // Passing bson.D{{}} as the filter matches all documents in the collection

        cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)

        if err != nil {

            log.Print(err)

        }


        // Finding multiple documents returns a cursor

        // Iterating through the cursor allows us to decode documents one at a time

        i := 0 

        for cur.Next(context.TODO()) {


            // create a value into which the single document can be decoded

            var err error

            err = cur.Decode(pResults) //pResults is some *[]MyStruct

            if err != nil {

                log.Fatal(err)

            }


            i++

        }


        if err := cur.Err(); err != nil {

            log.Fatal(err)

        }

        cur.Close(context.TODO())


        return i, err


    }

我正在尝试填充由参数给出的数组数据,现在代码无法成功解码。pResultscur.Decode()MyStruct


目标是不仅能够通过分析和我的,而不必为我想从数据库中提取的每个新结构单独开发。MyStructMyOtherStructMyAmazingStructextractManySpecificStructByIDFromDB


我试图在网上搜索结果,但最终没有一个搜索工作。


提前致谢!


GCT1015
浏览 68回答 1
1回答

白板的微信

使用 Cursor.Allfunc (db *MongoController) extractManyByIDFromDB(dbName string, collectionName string, pResults interface{}, limit int64) error {    collection := db.client.Database(dbName).Collection(collectionName)    findOptions := options.Find()    findOptions.SetLimit(limit)    // Passing bson.D{{}} as the filter matches all documents in the collection    cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)    if err != nil {        log.Print(err)    }    err := cur.All(context.TODO(), pResults)    cur.Close(context.TODO())    return err}使用切片长度确定解码的元素数。var results []Exampleerr := c.extractManyByIDFromDB(db, coll, &results, limit)if err != nil {   // handle error}fmt.Println("%d documents extracted", len(results))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go