详解Go开发Struct转换成map两种方式比较
最近做Go开发的时候接触到了一个新的orm第三方框架gorose,在使用的过程中,发现没有类似beego进行直接对struct结构进行操作的方法,有部分API是通过map进行数据库相关操作,那么就需要我们把struct转化成map,下面是是我尝试两种不同struct转换成map的方法
mport(
"encoding/json"
"fmt"
"reflect"
"time"
)
typePersionstruct{
Idint
Namestring
Addressstring
Emailstring
Schoolstring
Citystring
Companystring
Ageint
Sexstring
Proviecestring
Comstring
PostTostring
Buysstring
Hosstring
}
funcmain(){
StructToMapViaJson()
//StructToMapViaReflect()
}
funcStructToMapViaJson(){
m:=make(map[string]interface{})
t:=time.Now()
person:=Persion{
Id:98439,
Name:"zhaondifnei",
Address:"大沙地",
Email:"dashdisnin@126.com",
School:"广州第十五中学",
City:"zhongguoguanzhou",
Company:"sndifneinsifnienisn",
Age:23,
Sex:"F",
Proviece:"jianxi",
Com:"广州兰博基尼",
PostTo:"蓝鲸XXXXXXXX",
Buys:"shensinfienisnfieni",
Hos:"zhonsndifneisnidnfie",
}
j,_:=json.Marshal(person)
json.Unmarshal(j,&m)
fmt.Println(m)
fmt.Println(time.Now().Sub(t))
}
一、通过struct转json,json转成map
funcStructToMapViaJson(){
m:=make(map[string]interface{})
t:=time.Now()
person:=Persion{
Id:98439,
Name:"zhaondifnei",
Address:"大沙地",
Email:"dashdisnin@126.com",
School:"广州第十五中学",
City:"zhongguoguanzhou",
Company:"sndifneinsifnienisn",
Age:23,
Sex:"F",
Proviece:"jianxi",
Com:"广州兰博基尼",
PostTo:"蓝鲸XXXXXXXX",
Buys:"shensinfienisnfieni",
Hos:"zhonsndifneisnidnfie",
}
j,_:=json.Marshal(person)
json.Unmarshal(j,&m)
fmt.Println(m)
fmt.Printf("duration:%d",time.Now().Sub(t))
}
output:
map[Proviece:jianxiCom:广州兰博基尼Hos:zhonsndifneisnidnfieName:zhaondifneiCompany:sndifneinsifnienisnBuys:shensinfienisnfieniAge:23PostTo:蓝鲸XXXXXXXXAddress:大沙地School:广州第十五中学City:zhongguoguanzhouSex:FId:98439Email:dashdisnin@126.com]
duration:250467
二、通过反射形式生成map
funcStructToMapViaReflect(){
m:=make(map[string]interface{})
t:=time.Now()
person:=Persion{
Id:98439,
Name:"zhaondifnei",
Address:"大沙地",
Email:"dashdisnin@126.com",
School:"广州第十五中学",
City:"zhongguoguanzhou",
Company:"sndifneinsifnienisn",
Age:23,
Sex:"F",
Proviece:"jianxi",
Com:"广州兰博基尼",
PostTo:"蓝鲸XXXXXXXX",
Buys:"shensinfienisnfieni",
Hos:"zhonsndifneisnidnfie",
}
elem:=reflect.ValueOf(&person).Elem()
relType:=elem.Type()
fori:=0;i
output:
map[Buys:shensinfienisnfieniName:zhaondifneiCity:zhongguoguanzhouSex:FProviece:jianxiCom:广州兰博基尼Id:98439School:广州第十五中学Address:大沙地Age:23PostTo:蓝鲸XXXXXXXXHos:zhonsndifneisnidnfieEmail:dashdisnin@126.comCompany:sndifneinsifnienisn]
duration:104239
结论
通过比较可以看出,通过反射的形式转换基本上是通过json形式转换的两倍。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。