• go 实现struct转map


    从python转golang大约一个月了,对struct的使用还算顺手,但是很多时候还是会想念python的便捷。比如同时遍历两个字典,python使用for (x, y) in zip(map1, map2)就可以了,但是golang同时操作两个结构体就显得繁重。所以我要实现一个简单的需求,struct转map。

    转换的方法也很简单,我们利用反射reflect来解剖struct的字段,从而构建出字典。

    博主今天身体不适,打不动字了,直接上代码吧

    import (
    	"reflect"
    )
    
    func Struct2Map(obj interface{}) map[string]interface{} {
    	t := reflect.TypeOf(obj)
    	v := reflect.ValueOf(obj)
    
    	var data = make(map[string]interface{})
    	for i := 0; i < t.NumField(); i++ {
    		data[t.Field(i).Name] = v.Field(i).Interface()
    	}
    	return data
    }
    

    传入的obj是struct,而不是struct指针,假设结构体叫做Test,那么obj的声名方式为var obj Test或者obj := Test{}

    如果一定要声明称指针( obj := new(Test)或obj := &Test{} )时,Struct2Map方法中需要将取出指针的内容然后继续操作,因为指针是没有Field()方法的。代码如下

    import (
    	"reflect"
    )
    
    func Struct2Map(obj interface{}) map[string]interface{} {
    	obj_v := reflect.ValueOf(obj)
    	v := obj_v.Elem()
    	typeOfType := v.Type()
    	var data = make(map[string]interface{})
    	for i := 0; i < v.NumField(); i++ {
    		field := v.Field(i)
    		data[typeOfType.Field(i).Name] = field.Interface()
    	}
    	return data
    }
    
  • 相关阅读:
    Phonon
    qt 的mysql的库
    vwmare下安装fedora
    C++标准库
    C#命名空间
    用谷歌Chrome浏览器来当手机模拟器
    Javascript实现ECMAScript 5中的map、reduce和filter函数
    页面变灰实现方案
    jQuery检查元素是否在视口内(屏幕可见区域内)
    兼容浏览器的获取指定元素(elem)的样式属性(name)的方法
  • 原文地址:https://www.cnblogs.com/baiyb/p/8999670.html
Copyright © 2020-2023  润新知