为了账号安全,请及时绑定邮箱和手机立即绑定

Mongo FindOne 和界面{}

Mongo FindOne 和界面{}

Go
qq_花开花谢_0 2022-05-23 16:59:22
我正在尝试创建一个采用接口而不是特定类型并调用 FindOne 函数的函数。有谁知道为什么 printFirstTrainerByInterface 函数不能正常工作?我正在使用官方的 Go Mongo-Driver 和来自mongodb-go-driver-tutorial 的示例片段。package mainimport (    "context"    "fmt"    "log"    "go.mongodb.org/mongo-driver/bson"    "go.mongodb.org/mongo-driver/mongo"    "go.mongodb.org/mongo-driver/mongo/options")type Trainer struct {    Name string    Age  int    City string}var db *mongo.Databasefunc main() {    opts := options.Client().ApplyURI("mongodb://localhost:27017")    client, err := mongo.Connect(context.TODO(), opts)    if err != nil {        log.Fatal(err)    }    err = client.Ping(context.TODO(), nil)    if err != nil {        log.Fatal(err)    }    db = client.Database("test")    insertTestDocument()    var result Trainer    printFirstTrainer(result)    var result2 Trainer    printFirstTrainerByInterface(&result2)}func insertTestDocument() {    ash := Trainer{"Ash", 10, "Pallet Town"}    res, err := db.Collection("trainers").InsertOne(context.TODO(), ash)    if err != nil {        log.Fatal(err)    }    fmt.Println("Inserted a test document: ", res.InsertedID)}func printFirstTrainer(result Trainer) {    collection := db.Collection("trainers")    err := collection.FindOne(context.TODO(), bson.M{}).Decode(&result)    if err != nil {        log.Fatal(err)    }    fmt.Printf("Found a single document: %+v\n", result)}func printFirstTrainerByInterface(result interface{}) {    collection := db.Collection("trainers")    err := collection.FindOne(context.TODO(), bson.M{}).Decode(&result)    if err != nil {        log.Fatal(err)    }    fmt.Printf("Found a single document: %+v\n", result)}输出:Inserted a test document:  ObjectID("5e8216f74f41a13f01061d61")Found a single document: {Name:Ash Age:10 City:Pallet Town}Found a single document: [{Key:_id Value:ObjectID("5e8216f74f41a13f01061d61")} {Key:name Value:Ash} {Key:age Value:10} {Key:city Value:Pallet Town}]
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

您将要解码的结构的地址作为接口传递。您必须将其作为参数传递给解码,而不是接口的地址。尝试:

err := collection.FindOne(context.TODO(), bson.M{}).Decode(result)


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号