详解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;ioutput:
map[Buys:shensinfienisnfieniName:zhaondifneiCity:zhongguoguanzhouSex:FProviece:jianxiCom:广州兰博基尼Id:98439School:广州第十五中学Address:大沙地Age:23PostTo:蓝鲸XXXXXXXXHos:zhonsndifneisnidnfieEmail:dashdisnin@126.comCompany:sndifneinsifnienisn]
duration:104239结论
通过比较可以看出,通过反射的形式转换基本上是通过json形式转换的两倍。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。