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 
} 

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12479.html

(0)
上一篇 2021年7月19日 14:42
下一篇 2021年7月19日 14:42

相关推荐

发表回复

登录后才能评论