国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

詳解Go開發(fā)Struct轉(zhuǎn)換成map兩種方式比較

2020-04-01 18:55:45
字體:
供稿:網(wǎng)友

最近做Go開發(fā)的時(shí)候接觸到了一個(gè)新的orm第三方框架gorose,在使用的過程中,發(fā)現(xiàn)沒有類似beego進(jìn)行直接對(duì)struct結(jié)構(gòu)進(jìn)行操作的方法,有部分API是通過map進(jìn)行數(shù)據(jù)庫相關(guān)操作,那么就需要我們把struct轉(zhuǎn)化成map,下面是是我嘗試兩種不同struct轉(zhuǎn)換成map的方法

mport (  "encoding/json"  "fmt"  "reflect"  "time")type Persion struct {  Id    int  Name   string  Address string  Email  string  School  string  City   string  Company string  Age   int  Sex   string  Proviece string  Com   string  PostTo  string  Buys   string  Hos   string}func main() {  StructToMapViaJson()  //StructToMapViaReflect()}func StructToMapViaJson() {  m := make(map[string]interface{})  t := time.Now()  person := Persion{    Id:    98439,    Name:   "zhaondifnei",    Address: "大沙地",    Email:  "dashdisnin@126.com",    School:  "廣州第十五中學(xué)",    City:   "zhongguoguanzhou",    Company: "sndifneinsifnienisn",    Age:   23,    Sex:   "F",    Proviece: "jianxi",    Com:   "廣州蘭博基尼",    PostTo:  "藍(lán)鯨XXXXXXXX",    Buys:   "shensinfienisnfieni",    Hos:   "zhonsndifneisnidnfie",  }  j, _ := json.Marshal(person)  json.Unmarshal(j, &m)  fmt.Println(m)  fmt.Println(time.Now().Sub(t))}

一、通過struct轉(zhuǎn)json,json轉(zhuǎn)成map

func StructToMapViaJson() {  m := make(map[string]interface{})  t := time.Now()  person := Persion{    Id:    98439,    Name:   "zhaondifnei",    Address: "大沙地",    Email:  "dashdisnin@126.com",    School:  "廣州第十五中學(xué)",    City:   "zhongguoguanzhou",    Company: "sndifneinsifnienisn",    Age:   23,    Sex:   "F",    Proviece: "jianxi",    Com:   "廣州蘭博基尼",    PostTo:  "藍(lán)鯨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:jianxi Com:廣州蘭博基尼 Hos:zhonsndifneisnidnfie Name:zhaondifnei Company:sndifneinsifnienisn Buys:shensinfienisnfieni Age:23 PostTo:藍(lán)鯨XXXXXXXX Address:大沙地 School:廣州第十五中學(xué) City:zhongguoguanzhou Sex:F Id:98439 Email:dashdisnin@126.com]
duration:250467

二、通過反射形式生成map

func StructToMapViaReflect() {  m := make(map[string]interface{})  t := time.Now()  person := Persion{    Id:    98439,    Name:   "zhaondifnei",    Address: "大沙地",    Email:  "dashdisnin@126.com",    School:  "廣州第十五中學(xué)",    City:   "zhongguoguanzhou",    Company: "sndifneinsifnienisn",    Age:   23,    Sex:   "F",    Proviece: "jianxi",    Com:   "廣州蘭博基尼",    PostTo:  "藍(lán)鯨XXXXXXXX",    Buys:   "shensinfienisnfieni",    Hos:   "zhonsndifneisnidnfie",  }  elem := reflect.ValueOf(&person).Elem()  relType := elem.Type()  for i := 0; i < relType.NumField(); i++ {    m[relType.Field(i).Name] = elem.Field(i).Interface()  }  fmt.Println(m)  fmt.Printf("duration:%d", time.Now().Sub(t))}

output:
map[Buys:shensinfienisnfieni Name:zhaondifnei City:zhongguoguanzhou Sex:F Proviece:jianxi Com:廣州蘭博基尼 Id:98439 School:廣州第十五中學(xué) Address:大沙地 Age:23 PostTo:藍(lán)鯨XXXXXXXX Hos:zhonsndifneisnidnfie Email:dashdisnin@126.com Company:sndifneinsifnienisn]
duration:104239

結(jié)論

通過比較可以看出,通過反射的形式轉(zhuǎn)換基本上是通過json形式轉(zhuǎn)換的兩倍。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 共和县| 肇州县| 扶绥县| 五指山市| 阳信县| 老河口市| 周口市| 木里| 灯塔市| 女性| 武威市| 乡城县| 天门市| 武夷山市| 江阴市| 玛纳斯县| 潍坊市| 禄丰县| 独山县| 洪江市| 增城市| 正安县| 康平县| 镇平县| 分宜县| 乳山市| 威宁| 庐江县| 韩城市| 双流县| 昌图县| 壤塘县| 鸡东县| 渑池县| 苏州市| 阿勒泰市| 屏南县| 彭阳县| 浮梁县| 西华县| 恩施市|