将golang中变量重置为零的reflect方法
程序员文章站
2022-07-10 22:31:17
下面给出简单的代码,这里通过将变量重置为零来实现过滤字段的目的: 如果不希望使用二次映射,可以考虑使用reflect库中,Value结构体的FieldByName成员函数。 ......
下面给出简单的代码,这里通过将变量重置为零来实现过滤字段的目的:
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成员函数。
上一篇: 【原创】如何用面向对象思想编写代码