当前位置: 首页 > 后端技术 > PHP

for-loop和json.Unmarshal性能分析总结

时间:2023-03-30 05:47:54 PHP

原文地址:for-loop和json.Unmarshal性能分析总结项目中经常会遇到循环交换赋值的数据处理场景,尤其是RPC,数据交互格式要转换为Protobuf,赋值是不可避免的。一般有以下几种方法:forforrangejson.Marshal/Unmarshal这个时候面临“取舍困难”,用哪个比较好?我也想少点代码,又担心会不会影响性能……为了理清这个疑惑,我分别写三个使用场景。来简单单看它们的性能情况,看谁更“好”功能代码...typePersonstruct{Namestring`json:"name"`Ageint`json:"age"`Avatarstring`json:"avatar"`类型字符串`json:"type"`}typeAgainPersonstruct{名称字符串`json:"name"`年龄int`json:"age"`头像字符串`json:"avatar"`类型字符串`json:"type"`}constMAX=10000funcInitPerson()[]Person{varpersons[]Personfori:=0;我<最大;i++{persons=append(persons,Person{姓名:“EDDYCJY”,年龄:i,头像:“https://github.com/EDDYCJY”,类型:“Person”,})}returnpersons}funcForStruct(p[]Person,countint){fori:=0;我<计数;i++{_,_=i,p[i]}}funcForRangeStruct(p[]Person){对于i,v:=rangep{_,_=i,v}}funcJsonToStruct(data[]byte,againPerson[]AgainPerson)([]AgainPerson,error){err:=json.Unmarshal(data,&againPerson)返回一个gainPerson,err}funcJsonIteratorToStruct(data[]byte,againPerson[]AgainPerson)([]AgainPerson,error){varjsonIter=jsoniter.ConfigCompatibleWithStandardLibraryerr:=jsonIter.Unmarshal(data,&againPerson)returnagainPerson,错误}测试代码。..funcBenchmarkForStruct(b*testing.B){person:=InitPerson()count:=len(person)b.ResetTimer()fori:=0;我