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

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

Go 中的泛型編程,隱式泛型類型

Go 中的泛型編程,隱式泛型類型

Go
縹緲止盈 2021-10-11 10:46:21
我需要 Go 隱式解析我的結(jié)構(gòu)類型,以便對某些屬性進(jìn)行通用替換。//must replace the attribute with attValuefunc SetAttribute(object interface{}, attributeName string, attValue interface{}, objectType reflect.Type) interface{} {    /// works perfectly, but function SetAttribute needs to know Customer type to do the convertion    convertedObject := object.(Customer) // <-- Need to hard code a cast :(    // doesn't works... raise panic!    //convertedObject := object     value := reflect.ValueOf(&convertedObject).Elem()    field := value.FieldByName(attributeName)    valueForAtt := reflect.ValueOf(attValue)    field.Set(valueForAtt)    return value.Interface()}請查看 Go 游樂場中的完整示例... http://play.golang.org/p/jxxSB5FKEy
查看完整描述

1 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

convertedObject是object接口中內(nèi)容的值。取那個(gè)地址對原來的沒有影響customer。(并且被轉(zhuǎn)換可能是名稱的一個(gè)糟糕的前綴,因?yàn)樗菑摹邦愋蛿嘌浴倍皇恰邦愋娃D(zhuǎn)換”生成的)


如果您直接使用 object,它會發(fā)生恐慌,因?yàn)槟讷@取接口的地址,而不是客戶。


您需要將要修改的客戶的地址傳遞給函數(shù):


SetAttribute(&customer, "Local", addressNew, reflect.TypeOf(Customer{}))

您還可以先檢查 SetAttribute 是否為指針:


if reflect.ValueOf(object).Kind() != reflect.Ptr {

    panic("need a pointer")

}


value := reflect.ValueOf(object).Elem() 

field := value.FieldByName(attributeName)

valueForAtt := reflect.ValueOf(attValue)

field.Set(valueForAtt)

return value.Interface()


查看完整回答
反對 回復(fù) 2021-10-11
  • 1 回答
  • 0 關(guān)注
  • 196 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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