当前位置: 移动技术网 > IT编程>软件设计>面向对象 > 将golang中变量重置为零的reflect方法

将golang中变量重置为零的reflect方法

2019年02月01日  | 移动技术网IT编程  | 我要评论

下面给出简单的代码,这里通过将变量重置为零来实现过滤字段的目的:

type student struct {
	age    int    `json:"age,omitempty"`
	name   string `json:"name,omitempty"`
	school string `json:"school,omitempty"`
}

var st = student{
	age:    10,
	name:   "john smith",
	school: "a high school",
}

var dic = map[string]int{
	"age":    0,
	"name":   1,
	"school": 2,
}

var filters = []string{
	"name",
	"school",
}

func initstudentelems(st *student, fields []string) bool {
	v := reflect.indirect(reflect.valueof(st))
	for _, field := range fields {
		idx, exist := dic[field]
		if !exist {
			return false
		}
		vf := v.field(idx)
		vf.set(reflect.zero(vf.type()))
	}
	return true
}

func printmarshalident(st *student) error {
	b, err := json.marshalindent(st, "", "    ")
	if err != nil {
		return err
	}

	fmt.println(string(b))
	return nil
}

func main() {
	printmarshalident(&st)
	initstudentelems(&st, filters)
	printmarshalident(&st)
}

 如果不希望使用二次映射,可以考虑使用reflect库中,value结构体的fieldbyname成员函数。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网