我們有這樣的結(jié)構(gòu):type S struct { M map[string]bool}我們?nèi)绾螌?shí)現(xiàn)這樣的功能:// this function modify field by name to a new mapfunc Modify(s *S, name string, val map[string]bool){ ...}func Test() { s := S{ M: map[string]bool{"Hello":true}, } m := map[string]bool{"World":false} Modify(&s, "M", m)}Reflect包支持SetInt/SetString等,但不支持SetMap。有辦法解決這個問題嗎?
1 回答

墨色風(fēng)雨
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個贊
使用reflect.Set()
func Modify(s *S, name string, val interface{}) {
rv := reflect.ValueOf(val)
if !rv.IsValid() {
rv = reflect.Zero(reflect.ValueOf(s).Elem().FieldByName(name).Type())
}
reflect.ValueOf(s).Elem().FieldByName(name).Set(rv)
}
- 1 回答
- 0 關(guān)注
- 106 瀏覽
添加回答
舉報(bào)
0/150
提交
取消