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

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

返回給函數(shù)的調(diào)用者時無法保留 golang 字段的值

返回給函數(shù)的調(diào)用者時無法保留 golang 字段的值

Go
蕪湖不蕪 2023-06-19 15:53:15
我有一個函數(shù),它接受值和字段的切片作為一組可選參數(shù),并且該函數(shù)將每個值映射到一個字段并返回錯誤(如果有的話)給調(diào)用者,如下所示func Unmarshall(source []interface{}, dest ...interface{}) error {    if len(source) != len(dest) {        return errors.New("source and destination doesn't match")    }    for i, s := range source {        dest[i] = s    }    return nil}在我為來電者提供的代碼下方for _, r := range rows.Values {        item := entity.Item{}        e :=Unmarshall(r,            &item.Name,            &item.Description,                      &item.AddedUTCDatetime,            &item.ModifiedUTCDatetime)        if e == nil {                       items = append(items, item)        }    }但是上面的問題是即使我傳入了指向字段的指針,也item.Name,item.Description,                &item.AddedUTCDatetime, &item.ModifiedUTCDatetime不會保留中設(shè)置的值。Unmarshall func上面的代碼有什么問題嗎?
查看完整描述

2 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊

上面的代碼有什么問題嗎?


是的。您正在丟棄指針,只是用新值覆蓋它們。要設(shè)置指針指向的值,您必須取消引用它。在您的情況下可能看起來像這樣:


for i, s := range source {

    str, ok := dest[i].(*string)

    if ok {

      *str = s.(string)

    }

}


查看完整回答
反對 回復(fù) 2023-06-19
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊

這個照顧所有類型


for i, s := range source {

        so := reflect.ValueOf(s)

        if !reflect.DeepEqual(so, reflect.Zero(reflect.TypeOf(so)).Interface()) {

            reflect.ValueOf(dest[i]).Elem().Set(so)

        }

    }


查看完整回答
反對 回復(fù) 2023-06-19
  • 2 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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