登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-01 14:36:35 136浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《如何使用反射包操作结构中的地图字段?》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我们的结构如下:

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


解决方案


使用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)
}

Playground

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>