如何使用反射包操作结构中的地图字段?

我们有这样的结构:


type S struct {

    M map[string]bool

}

我们如何实现这样的功能:



// this function modify field by name to a new map

func 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。有办法解决这个问题吗?


翻翻过去那场雪
浏览 85回答 1
1回答

墨色风雨

使用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)}操场
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go