设为首页 加入收藏

TOP

将golang中变量重置为零的reflect方法
2019-09-17 16:58:38 】 浏览:20
Tags:golang 变量 重置 reflect 方法

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

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成员函数。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Slickflow.NET 开源工作流引擎高.. 下一篇OSGi规范的C#实现开源

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目