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

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

将golang中变量重置为零的reflect方法的更多相关文章

  1. python 判断矩阵中每行非零个数的方法

    python 判断矩阵中每行非零个数的方法: # -*- coding: utf-8 -*- # @Time : 2018/5/17 15:05 # @Author : Sizer # @Site : ...

  2. golang中获取字符串长度的几种方法

    一.获取字符串长度的几种方法   - 使用 bytes.Count() 统计   - 使用 strings.Count() 统计   - 将字符串转换为 []rune 后调用 len 函数进行统计   ...

  3. 在shell中变量的赋值有五种方法!

    转至:https://blog.csdn.net/weibo1230123/article/details/82085226 在shell中变量的赋值有五种 :使用 read 命令,直接赋值,使用命令 ...

  4. [salt] jinja模板中变量使用pillar的几种方法

    先转载下jinja模板中使用变量的方法,后文主要讲解pillar的变量使用方法 一.jinja模版的使用方法: 1.file状态使用template参数 - template:jinja 2.模版文件 ...

  5. 关于golang中某些包无法下载的解决方法

    由于某些不可描述的原因,我们 在go module 环境下(啥?这个不知道是啥?赶紧恶补下)进行go get xxxx时,会发现一些依赖库无法访问(不要问为什么无法访问). 解决办法 戳这里:http ...

  6. golang中map并发读写问题及解决方法

    一.map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:concurrent map read and map write的错误 如下代码很容易就出现map并发读写问题 ...

  7. 【荐】详解 golang 中的 interface 和 nil

    golang 的 nil 在概念上和其它语言的 null.None.nil.NULL一样,都指代零值或空值.nil 是预先说明的标识符,也即通常意义上的关键字.在 golang 中,nil 只能赋值给 ...

  8. [golang note] 变量常量

    变量 • 变量声明 √ golang变量声明的关键字为var. √ golang变量声明时类型信息放置在变量名之后. ▶ 单个变量声明 ▪ 语法如下 var name type ▪ 示例如下 var ...

  9. golang中管道热替换

    golang中管道替换问题 https://blog.csdn.net/cyk2396/article/details/78875347 1.运行以下代码: var chan1 chan int va ...

随机推荐

  1. 作为程序员你不知道中国互联网300强你就OUT了!

    很多程序员们工作一段时间之后,都想跳槽到综合实力更强的公司以获取高薪资或者接触到前沿的技术,但是哪些行业值得我们投入大量的时间,哪些公司属于我们行业中的佼佼者呢, 那么小编给您分析下2018年中国互联 ...

  2. 配置DTP

    拓扑一  结果:NO 默认auto(被动)模式 Switch>show interfaces fastEthernet / switchPort Name: Fa0/ Switchport: E ...

  3. C#创建、读写、增加、删除XML操作

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  4. 2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解 实验内容及步骤 第一部分:直接修改程序机器指令,改变程序执行流程 关键:通过修改call指令跳转的地址,将原本指向被 ...

  5. QT | 一些学习心得

    1. 如何使控件随着窗口大小变化而自动填充? 选中控件中最外层的那个控件,如centralWidget(不要去选中内部的小控件,这样能够保证内部的相对位置) 然后对centralWidget选择布局方 ...

  6. python从零开始 -- 第0篇之Hello World!

    为什么选择python以及版本选择 学习资料 学习方法和路径 1. 为什么选择python以及版本选择: Python  好玩,强大,更多关于关于为什么选择Python,在  编程小白的第一本 Pyt ...

  7. bug狩猎

    最近需求少了,终于有时间修一下底层的bug,做一点工具方便查bug,写篇文章简单记录一下. 一是优化了一个玩法进程的启动速度.这个玩法需要用战力做匹配,玩家按战力分段放进不同的桶里,每个桶用skipl ...

  8. Python3.7 练习题(二) 使用Python进行文本词频统计

    # 使用Python进行词频统计 mytext = """Background Industrial Light & Magic (ILM) was starte ...

  9. html5 知识点简单总结02

    三个列表: 1.无序列表 默认样式  实心小圆点 ul type属性 "square" 实心方形 type属性  "circle" 空心圆 type属性  &q ...

  10. C语言 基础

    内存的定义 在学习python的时候 了解过内存的管理机制,例如引用计数,垃圾回收,小内存池的概念. 但是并不了解内存究竟是个什么东西?不了解内存的实际存储方式. Mac OS Mojave 处理器 ...