第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當(dāng)作為interface{}返回map傳遞時解碼為struct

當(dāng)作為interface{}返回map傳遞時解碼為struct

Go
一只斗牛犬 2023-07-26 17:12:36
使用 mongo-driver 時,我有這個結(jié)構(gòu),我將其作為 interface{} 傳遞給 get 函數(shù)。問題是當(dāng)我使用 Decode 方法時,它返回一個映射,而我期待一個正確類型的結(jié)構(gòu)。type Item struct {?//whatever}type mymodel struct {? ? I? ? ? ? ? ? interface{}?? ? F? ? ? ? ? ? interface{}? ? DatabaseName string? ? Collection? ?string}func Do(){? ? var item Item? ? var filter Item? ? m:= mymodel{I: item, F: filter}? ? res,_ := get(m)}func get(m mymodel) (*interface{}, error) {? ? c := database.DBCon.Database("whatever").Collection("whatever")? ? ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)? ? err := c.FindOne(ctx, m.F).Decode(&m.I)? ? if err != nil {? ? ? ? log.Log.Info(err)? ? ? ? return nil, err? ? }? ? return &m.I, nil}去
查看完整描述

1 回答

?
慕少森

TA貢獻2019條經(jīng)驗 獲得超9個贊

您需要創(chuàng)建接口字段I并F存儲一個指向要將數(shù)據(jù)解碼到的實例的指針(可能不是,F(xiàn)因為您沒有將任何內(nèi)容解碼到其中),然后將它們直接傳遞給Decode,而不需要任何更多的地址操作(&x) 。


例如:


func Do(){

    var item Item

    var filter Item


    m:= mymodel{I: &item, F: filter}

    res,_ := get(m)

}


func get(m mymodel) (*interface{}, error) {

    c := database.DBCon.Database("whatever").Collection("whatever")


    ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)

    err := c.FindOne(ctx, m.F).Decode(m.I)

    if err != nil {

        log.Log.Info(err)

        return nil, err

    }


    return &m.I, nil

}



查看完整回答
反對 回復(fù) 2023-07-26
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號