亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

反射設置作為 interface{} 傳入的結構體字段

反射設置作為 interface{} 傳入的結構體字段

Go
守著星空守著你 2023-07-17 14:55:15
以下工作正常:type MyStruct struct {    MyField int32}func SetReflectConcrete(obj *MyStruct, fieldName string, newValue interface{}) {    objElem := reflect.ValueOf(obj).Elem()    field := objElem.FieldByName(fieldName)    field.Set(reflect.ValueOf(newValue))}func main() {    myStruct := MyStruct{123}    SetReflectConcrete(myStruct, "MyField", int32{1234})}如何制作適用SetReflect于任何結構的函數變體?到目前為止我所有的嘗試都失敗了。簽名會是這樣的:func SetReflectInterface(obj interface{}, fieldName string, newValue interface{})當這樣稱呼它時,這甚至可能嗎SetReflectInterface(myStruct, "MyField", int32{1234})或者它必須被稱為像SetReflectInterface(&myStruct, "MyField", int32{1234})(畢竟,interface{}有一個指向該結構的指針。)
查看完整描述

1 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

將參數聲明interface{}為您注意到的類型。將指針傳遞給結構體,如最后一個代碼片段所示。


func SetReflectConcrete(obj interface{}, fieldName string, newValue interface{}) {

    objElem := reflect.ValueOf(obj).Elem()

    field := objElem.FieldByName(fieldName)

    field.Set(reflect.ValueOf(newValue))

}


myStruct := MyStruct{123}

SetReflectConcrete(&myStruct, "MyField", int32(1234))

在操場上運行它。


反射值必須是可尋址的才能設置字段。如果直接從結構創建該值將不可尋址。


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號