Decode以下代碼的步驟未正確填充原始對象document。它用一個bson對象覆蓋它。func main() { c := Call{} dbGetObject("collection", &c)}func dbGetObject(collectionName string, document interface{}) (err error) { uri, creds, auth := dbGetAuth() clientOpts := options.Client().ApplyURI(uri).SetAuth(creds) client, err := mongo.Connect(context.TODO(), clientOpts) if err != nil { log.Fatal(err) return err } defer client.Disconnect(context.TODO()) collection := client.Database(auth.Database).Collection(collectionName) err = collection.FindOne(context.TODO(), bson.M{"number": "12345"}).Decode(&document) if err != nil { log.Fatal(err) return err } return nil}然而,以下代碼確實可以正常工作:func dbGetObject(collectionName string) (err error) { uri, creds, auth := dbGetAuth() clientOpts := options.Client().ApplyURI(uri).SetAuth(creds) client, err := mongo.Connect(context.TODO(), clientOpts) if err != nil { log.Fatal(err) return err } defer client.Disconnect(context.TODO()) collection := client.Database(auth.Database).Collection(collectionName) c := Call{} err = collection.FindOne(context.TODO(), bson.M{"number": "12345"}).Decode(&c) if err != nil { log.Fatal(err) return err } return nil}唯一的區(qū)別是結構的實例被傳遞到函數中而不是在函數中實例化dbGetObject。我究竟做錯了什么
2 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
我真的意識到發(fā)生了什么。在調用函數然后調用解碼時,我傳遞了一個指針。所以,它實際上是在將一個指針傳遞給解碼調用。所以解決方法是改變解碼調用:
err = collection.FindOne(context.TODO(), bson.M{"number": "12345"}).Decode(&document)
至
err = collection.FindOne(context.TODO(), bson.M{"number": "12345"}).Decode(document)

元芳怎么了
TA貢獻1798條經驗 獲得超7個贊
在第一個示例中,文檔的類型是interface
. 如果您將參數類型固定如下,它將正常工作。
func dbGetObject(collectionName string, document *Call)
- 2 回答
- 0 關注
- 178 瀏覽
添加回答
舉報
0/150
提交
取消