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

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

將字段/值從 src 復(fù)制到 dest 對象

將字段/值從 src 復(fù)制到 dest 對象

Go
慕慕森 2023-05-04 16:07:24
我正在嘗試將字段從一個結(jié)構(gòu)值復(fù)制到另一個結(jié)構(gòu)值,它們具有相同的字段定義。我有這個程序:package mainimport (    "log"    "reflect")func setExistingFields(src interface{}, dst interface{}) {    fields := reflect.TypeOf(src)    values := reflect.ValueOf(src)    num := fields.NumField()    s := reflect.ValueOf(src).Elem()    d := reflect.ValueOf(dst).Elem()    for i := 0; i < num; i++ {        field := fields.Field(i)        value := values.Field(i)        fsrc := s.FieldByName(field.Name)        fdest := d.FieldByName(field.Name)        if fdest.IsValid() && fsrc.IsValid() {            if fdest.CanSet() && fsrc.CanSet() {                fdest.Set(value)            }        }    }}// and then we main:func main() {    src := struct {        Foo string        Bar string    }{        "dog",        "pony",    }    dest := struct{ Foo string; Bar string }{}    setExistingFields(&src, &dest)    log.Println("dest.Foo", dest.Foo)}我運(yùn)行它,但出現(xiàn)錯誤:reflect: 非struct類型的NumField我不知道那是什么。這是一個游樂場鏈接: https ://play.golang.org/p/TsHTfAaeKhc
查看完整描述

2 回答

?
catspeake

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個贊

試試這個:


func setExistingFields(src interface{}, dst interface{}) {


    srcFields := reflect.TypeOf(src).Elem()

    srcValues := reflect.ValueOf(src).Elem()


    dstValues := reflect.ValueOf(dst).Elem()


    for i := 0; i < srcFields.NumField(); i++ {

        srcField := srcFields.Field(i)

        srcValue := srcValues.Field(i)


        dstValue := dstValues.FieldByName(srcField.Name)


        if dstValue.IsValid() {

            if dstValue.CanSet() {

                dstValue.Set(srcValue)

            }

        }


    }

}

請注意,您需要額外檢查src字段值是否可分配給dst字段類型。


編輯:您收到該錯誤的原因是因?yàn)閒ields此時是指向結(jié)構(gòu)的指針。您需要使用Elem().


查看完整回答
反對 回復(fù) 2023-05-04
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個贊

這是行不通的:一個結(jié)構(gòu)總是在編譯時獲得它的“模式”(例如它的字段)......你不能在運(yùn)行時添加更多字段。

我沒有看到你的確切用例是什么,但考慮類似map[string]string甚至map[string]interface{}能夠“擴(kuò)展”你傳遞的東西的內(nèi)容/字段......


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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